2016-03-26 13 views
0
video.onloadedmetadata = function start(){ //invoke 
    var thethis = this; 
    var event; 
    var timeout; 
    function func(){ 
     mainFunction(event); //this is supposed to fire only once, instead it fires constantly. 
     console.log("sending!!!"); //This won't stop show up in the console 
     clearTimeout(timeout); 
     console.log(event); 
    } 


    video.addEventListener("mousemove", function(e){ 
     event = e; 
     outsideElement = false; 
     clearTimeout(timeout); 
     timeout = setTimeout(func, 600); 
    }); 

    video.addEventListener("mouseout", function(){ //mouse is out of elem 
     outsideElement = true; //extra security, really make sure not to fire Mainfunction will check - if it's indeed outsideElement then it won't work properly. 
     clearTimeout(timeout); 
    }); //don't fire mainFunction in this case 


} 

Yapmaya çalıştığım şey gerçekte işe yaramıyor olsa da oldukça basit. Bir kullanıcı faresini videom üzerine taşıdığında ve yarım saniye boyunca belirli bir noktada durduğunda, mainFunction olarak adlandırılan bir fonksiyonun bir kez ateş etmesi beklenir. Bir dahaki sefere faresini hareket ettirir ve bir noktada durur, tekrar gerçekleşmesi gerekiyordu - ama bunun yerine mainFunction'u durdurmayacak. JQuery'yi birkaç nedenden dolayı kullanamıyorum, yani lütfen - eğer herhangi bir kütüphane olmadan, yardım ederseniz.Zamanlayıcı bir işlevi tetiklemeyi durduramıyor

JS FIDDLE: İşte https://jsfiddle.net/7con1p04/1/

+0

Kodunuzu sınayacak bir JSFiddle veya bir şey sağlayabilir misiniz? – FredMaggiowski

+0

bir göz at, sadece – user1938653

+0

yaptı Konsolu kontrol ederek sadece bir kez ve sadece durduğumda tetikler. Videoyu farenin içinde hareket ettirdiğimde, tekrar durmadığım sürece (ve sadece bir kez ateş edildi), sorunuzu anladığım kadarıyla, işte aradığınız davranış bu değil, değil mi? – FredMaggiowski

cevap

-1

sadece zamanlayıcı/mousemove gecikmeye aşağı işlevselliğini kaynar bir jsFiddle var (çok konsol kontrol edin) (aynı kod, başka herşeyi dışarı çıkardı):

var timeout; 

function func(){ 
    console.log('fire'); 
    clearTimeout(timeout); 
} 

document.addEventListener("mousemove", function(e){ 
    clearTimeout(timeout); 
    timeout = setTimeout(func, 600); 
}); 

Kusursuz çalışır.

Zamanlayıcı/gecikme mantığının kendisinden başka bir yere bakardım. Bu noktada ben olsaydım, bu fonksiyonların hepsine ayrı konsol.log çağrıları koymaya ve sadece beklediğiniz zaman arandığından emin olmaya başlarım.

+0

Konsolun gönderdiklerini kontrol et. "Ateş" i ateşlemeyi bırakmayacak, ancak "ateş" konsolu sadece bir kez ateş etmem gerektiğini söyledim - kullanıcı yarım saniyeliğine belli bir noktada durdu. O IDLE iken, hiçbir şey olmuyor. – user1938653

+0

@ user1938653 - Tek çıkışımın konsol olduğunu düşündüğümde, konsolun çalıştığını söylemeden önce kontrol ettiğim oldukça iyi bir oyundu. Ve benim için fareyi dokümana taşıyorum ve durmadan bir şey olmaz ... sonra bir buçuk saniye sonra ateş ediyor. Sonra onu bırakıyorum ve hiçbir şey olmuyor ... tekrar hareket etmedikçe ve sonra tekrar durmadığım sürece ... bu durumda durduktan yarım saniye sonra bir kez daha patlar. Bunu görmüyorsanız, hangi tarayıcı/sistemin bulunduğunuzu belirtmeniz gerekir, çünkü açıkçası buna özel bir şeydir. –

+0

@ user1938653 - FYI, gönderdiğiniz jsfiddle için aynı. Olay, sadece fareyi hareket ettirdikten sonra bir keresinde bir kez patlar ve sonra yarım saniye durur, sonra hareket edip durup tekrar yarım saniye bekleyene kadar hiçbir şey yapmaz. Fred aynı sonuçları rapor ediyor. Bir problemi gördüğün tek kişi sensin. Her iki testi de tıpkı senin gibi yaptım. Sisteminizde bir şey var, kodunuzu değil. –