文件丢弃像gmail一样悬停

时间:2013-01-14 20:40:05

标签: javascript jquery

我有以下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/

3 个答案:

答案 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。