2010-02-23 2 views
1

Voici le script Greasemonkey je travaille (source ci-dessous): http://userscripts.org/scripts/show/69722événement souris bizarreries

Vous pouvez le tester sur cette page: http://forums.whirlpool.net.au/forum/35

Passez la souris sur un titre de fil et un div apparaît avec un aperçu La chose étrange est, lorsque vous déplacez votre souris sur le div, l'événement «mouseout» est déclenché pour une raison quelconque.

Quelqu'un at-il une idée de la raison pour laquelle cela se produit?

// ==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

Rien n'apparaît pour moi dans Firefox, Chrome ou IE8. –

+0

J'ai oublié de mentionner que c'est un script greasemonkey. Vous aurez donc besoin de greasemonkey pour l'exécuter. – Yansky

Répondre

1

C'est l'un des problèmes avec mouseout vs mouseleave. (Un endroit où IE a fait quelque chose de bien, imaginez-le!)

Le Mouseout se déclenche lorsque vous vous déplacez dans un élément enfant, alors que le mouseleave se déclenche uniquement lorsque vous vous éloignez de l'élément ET de tous les éléments enfants. Pour plus d'informations, voir http://www.quirksmode.org/dom/events/index.html#t28.

+0

Ah, c'est exactement ce qui se passe. Merci pour le lien. Maintenant que je sais quoi google pour, j'ai trouvé cet article: http://blog.stchur.com/2007/03/15/mouseenter-and-mouseleave-events-for-firefox-and-other-non-ie- navigateurs/ Merci encore. :) – Yansky

0

Je ne vois pas <div> s sur vol stationnaire, mais pourrait-il que vous avez quelque chose qui apparaît sur la <div> qui est pas réellement son enfant, bloquant la <div>? Si vous l'avez fait, votre souris serait sur cet élément, pas le <div>, donc votre événement mouseout serait déclenché ..

+0

Peut-être, mais j'ai donné à la div un z-index de 50, et la position: absolue, donc cela ne signifie-t-il pas qu'il est au-dessus de tout? – Yansky

Questions connexes