我有简单的ol-li结构,想要添加拖拽它。另外我想突出显示不同颜色的悬停项目和dragover项目。但它在WebKit中是一个不寻常的错误。
最后一个元素捕获悬停伪类!为什么?我该如何预防?
这是一个例子:
var lis = document.querySelectorAll("li"),
ol = document.querySelector("ol"),
dragged = false,
dragover = false;
ol.addEventListener("drop", function(event) {
ol.insertBefore(dragged,dragover);
this.classList.remove("insistent");
}, false);
for (var i=0, n = lis.length; i < n; i++) {
lis[i].addEventListener("dragstart", function(event) {
dragged = this;
ol.classList.add("insistent");
}, false);
lis[i].addEventListener("dragover", function(event) {
if (dragover) {
dragover.classList.remove("dragover");
}
event.preventDefault();
dragover = this;
this.classList.add("dragover");
}, false);
}
答案 0 :(得分:6)
您只需添加.onmouseover
和.onmouseout
函数,然后添加/删除名为hovered
的类,而不是使用CSS :hover
。这是updated jsFiddle
要添加的Javascript(内部循环)
lis[i].onmouseover = function() {
// Adds the 'hovered' class
this.className = this.className + " hovered";
}
lis[i].onmouseout = function() {
// Removes the 'hovered' class
this.className = this.className.split(' ').filter(function(v) {
return v!='hovered'
}).join(' ');
}
CSS
.hovered {
background: #fc9;
}
附注:我可能会向ol
id='dragableList'
添加一个ID,并将行var lis = document.querySelectorAll("li")
更改为var lis = document.getElementById('dragableList').querySelectorAll("li")
,以防万一您的项目中有其他列表稍后的。 Here是包括
答案 1 :(得分:0)
以下是我如何解决它。不幸的是,我不得不求助于一点点。
我的网页折叠了悬停时突出显示的记录。单击该记录将展开它并禁用突出显示。再次单击将重新折叠并恢复悬停:
$(document).on('click', ".container.clickable", function(e){
var $this = $(this);
$this.toggleClass('expandable');
if ($this.hasClass('expandable')) {
$this.on('mouseenter', function(){
// workaround to stop a stuck :hover
$this.addClass('hilitable');
$this.off('mouseenter');
})
} else {
$this.removeClass('hilitable');
}
});