以下是我正在处理的关键字脚本(源代码如下):http://userscripts.org/scripts/show/69722
您可以在此页面上对其进行测试:http://forums.whirlpool.net.au/forum/35
将鼠标悬停在主题标题上,会出现带有预览的div。
奇怪的是,当你在div上移动鼠标时,'mouseout'事件因某种原因被解雇了。
任何人都有任何关于为什么会这样做的想法?
// ==UserScript==
// @name Whirlpool Mouseover Thread Title
// @namespace blurg!
// @description Whirlpool Mouseover Thread Title Preview
// @include http://forums.whirlpool.net.au/forum/*
// @version 0.2
// ==/UserScript==
var tPrev={
reginald:document.URL.match(new RegExp(/\/100$|\/82$|\/9$|\/107$|\/135$|\/80$|\/136$|\/125$|\/116$|\/63$|\/127$|\/139$|\/7$|\/129$|\/130$|\/131$|\/10$|\/38$|\/39$|\/91$|\/87$|\/112$|\/132$|\/8$|\/83$|\/138$|\/58$|\/106$|\/126$|\/35$|\/92$|\/137$|\/114$|\/123$|\/128$|\/18$|\/14$|\/15$|\/68$|\/72$|\/69$|\/94$|\/90$|\/102$|\/105$|\/109$|\/119$|\/108$|\/31$|\/67$|\/5$/)),
grabTrs:document.querySelectorAll("#threads>table>tbody>tr:not(.pointer):not(.deleted):not(.section) a.title"),
element:null,
threadNum:null,
modal:document.createElement('div'),
modalFunc:null,
modalReset:null,
onModal:null,
mouseoot:false,
mousePos:{
y:0,
x:0
},
tyme:{
over:0,
out:0
},
sTo:null
};
if(tPrev.reginald){
GM_addStyle('#tPrev_modal{position:absolute;z-index:50;width:500px;height:200px;background-color:white;border:3px solid grey;display:none;overflow:scroll;font-size:0.8em;}.advertising_block{display:none !important;}');
tPrev.modal.setAttribute('id','tPrev_modal');
document.body.appendChild(tPrev.modal);
/*console.log(tPrev.onModal);
tPrev.modalReset=function(w){
clearInterval(tPrev.sTo);
if(w=='link' && tPrev.onModal){
return;
}
if(w=='div'){
tPrev.onModal=false;
}
};*/
[].forEach.call(tPrev.grabTrs, function (item) {
item.addEventListener('mouseover',function(e){
tPrev.element=this;
//tPrev.findMousePosition(e);
tPrev.mousePos.x = e.clientX+window.pageXOffset;
tPrev.mousePos.y=(e.clientY+window.pageYOffset)-50;
tPrev.threadNum=tPrev.element.href.split('t=')[1];
tPrev.tyme.over=Date.now();
tPrev.sTo=setInterval(function(){
if((Date.now()-tPrev.tyme.over)>2000){
clearInterval(tPrev.sTo);
tPrev.modal.style.display='block';
tPrev.modal.style.left=tPrev.mousePos.x+'px';
tPrev.modal.style.top=tPrev.mousePos.y+'px';
//tPrev.onModal=true;
GM_xmlhttpRequest({
method: "GET",
url: 'http://74.125.155.132/search?q=cache:forums.whirlpool.net.au/forum-replies-archive.cfm/'+tPrev.threadNum+'.html',
onload: function(r) {
var rt=r.responseText;
var inOf = rt.indexOf('<td class="bodyuser">');
if(inOf>-1){
var iH1=rt.substring(inOf,rt.indexOf('<div class="footbar">'));
tPrev.modal.innerHTML='<tbody><tr>'+iH1;
//console.log('onload '+tPrev.onModal);
}
else{
tPrev.modal.innerHTML='<p style="font-size:1.5em;">Preview not available</p>';
}
},
onerror: function(e) {
tPrev.modal.innerHTML='<p style="font-size:1.5em;">Preview not available</p>';
}
});
}
},50);
}, false);
item.addEventListener('mouseout',function(e){
clearInterval(tPrev.sTo);
//console.log('item mouseout '+tPrev.onModal);
}, false);
});
//tPrev.modal.addEventListener('mouseover',function(e){tPrev.onModal=true;console.log('tPrev mouseout '+tPrev.onModal);}, false);
tPrev.modal.addEventListener('mouseover',function(e){
console.log('tPrev mouseover ');
}, false);
tPrev.mouseoot=tPrev.modal.addEventListener('mouseout',function(ev){
console.log('tPrev mouseout ');
/*tPrev.element=null;
tPrev.modal.innerHTML='';
tPrev.modal.style.display='none';
tPrev.tyme.over=0;*/
//this.removeEventListener('mouseout', tPrev.mouseoot, false);
}, false);
}
答案 0 :(得分:1)
这是mouseout与mouseleave的问题之一。 (一个地方IE做了正确的事。想象一下!)
当您移动到子元素时,Mouseout会触发,而只有当您移出元素和所有子元素时,mouseleave才会触发。
有关详细信息,请参阅http://www.quirksmode.org/dom/events/index.html#t28。
答案 1 :(得分:0)
我在悬停时看不到任何<div>
,但可能是<div>
上出现了一些实际上并不是它的孩子的东西,阻挡了<div>
?如果你这样做了,你的鼠标就会超过那个元素,而不是<div>,
,所以你的mouseout事件会被触发..