我有以下html:
<div class="drop_window">
<input class="drop_target" type="file" class="crop locale" size="800" />
<div class="file_name">{{ video.original_file_name }}</div>
</div>
要让drop_window在悬停时改变颜色,我可以这样做:
.drop_window:hover {
background: #F5FFF5;
}
但是,如果我尝试将文件拖到drop_window中,它不会改变颜色。我将如何做到这一点,类似于Gmail的文件丢弃功能?
以下是我目前所拥有的一个示例:http://jsfiddle.net/5MjGS/
答案 0 :(得分:6)
您可以在addEventListner
上使用dragenter
,然后您可以调整样式。确保更改dragexit
上的颜色,例如:
所以,如果您只想在div
尝试:
var drop = document.getElementById("layout");
drop.addEventListener("dragenter", change, false);
drop.addEventListener("dragleave",change_back,false);
function change() {
drop.style.backgroundColor = '#EFF2AA';
};
function change_back() {
drop.style.backgroundColor = 'transparent';
};
jsfiddle:http://jsfiddle.net/zFbfE/1/
答案 1 :(得分:4)
就像@enginefree说你必须添加一些事件来改变上传容器的CSS样式。
唯一的问题是我应该使用dragover
事件,而不是dragenter
事件。
var drop = document.getElementById("layout");
drop.addEventListener("dragover", change, false);
drop.addEventListener("dragleave",change_back, false);
drop.addEventListener("drop", change_back, false);
function change() {
drop.style.backgroundColor = '#EFF2AA';
};
function change_back() {
drop.style.backgroundColor = 'transparent';
};
这是因为如果将鼠标悬停在上传容器内的输入控件或其他div上,dragenter
将无效。
如果您将鼠标悬停在任何控件上,事件dragover
将会触发。您只需使用dragleave
事件再次删除样式。
答案 2 :(得分:1)
有很多拖放文件上传插件。
它看起来像一个文件,它是窗口上的悬停/鼠标悬停,不一定在元素上。
本教程http://www.inserthtml.com/2012/08/file-uploader/是我将AJAX文件上传到我制作的网站时所遵循的。这是演示: http://www.inserthtml.com/demo/file-upload/
看起来要定位他们使用此jQuery事件处理程序的拖动文件的输入。
$('#drop-files').bind('dragenter', function() {
$(this).css({'box-shadow' : 'inset 0px 0px 20px rgba(0, 0, 0, 0.1)', 'border' : '4px dashed #bb2b2b'});
return false;
});
所以你要找的事件处理程序是dragenter。