2013-09-27 4 views
7

रीसेट न करें I फ़ंक्शन को ट्रिगर करने के लिए jquery-mousewheel प्लगइन का उपयोग कर रहा हूं।मूसहेल इवेंट श्रोता को अलग और फिर से संलग्न करें स्क्रॉल जड़ता

जब मैं को पर कॉल करता हूं तो मैं श्रोता को अलग करता हूं और एनीमेशन पूरा होने तक प्रतीक्षा करता हूं, फिर मैं श्रोता को फिर से संलग्न करता हूं।

समस्या यह है कि जब मैं इसे फिर से संलग्न करता हूं, तो mousewheel प्लगइन अभी भी कुछ मकान/ट्रैकपैड की जड़ता को सुन रहा है, और को को बार-बार स्थानांतरित करें।

मैं debouncing या समारोह कॉल थ्रॉटल लगता है कि मेरे विशिष्ट मामले में अच्छा समाधान है, क्योंकि जड़ता अभी भी वहाँ है नहीं कर रहे हैं, और मैं भी श्रोता अन्य संभावित moveit कॉल के लिए तुरंत संलग्न किया जा करना चाहते हैं।

क्या मूसहेल घटना को पूरी तरह से रीसेट करके "जड़त्व को मारने" का कोई तरीका है, केवल इसे अलग करने के बजाय?

$(document).ready(function() { 

    var tween; 
    var slide = $('#slide'); 

    function bodyListen() { 
     $('body').on('mousewheel.bodyscroll', 
     function (e, delta, deltaX, deltaY) { 
      e.preventDefault(); 
      $('body').off('mousewheel.bodyscroll'); 
      moveit(); 
     }); 
    } 

    function moveit() { 
     tween = TweenMax.to(slide, 0.8, { 
      marginLeft: 300, 
      onComplete: bodyListen 
     }); 
    } 

    bodyListen(); 
}); 
+0

क्या आप इसके साथ कहीं भी गए? – iamdarrenhall

+0

@ dazhall दुर्भाग्य से मुझे एक कामकाज अपनाना पड़ा, जैसा कि हर कोई करता है। मैंने बस मूसहेल श्रोता के पुन: अनुलग्नक में देरी की :( – Luke

+0

घटना श्रोता को अलग करने के बजाय वैश्विक ध्वज क्यों न जोड़ें? अगर ध्वज चालू है, तो श्रोता कुछ भी नहीं करता है, और इसके अलावा यह भी करता है। –

उत्तर

4

उपयोग झंडे जब, घटनाओं (या डोम से संबंधित किसी भी हेरफेर) के साथ काम कर घटना श्रोता वजह से अक्सर asyncronous कार्यों की तरह व्यवहार कर सकते हैं।

$(document).ready(function() { 

    var tween; 
    var slide = $('#slide'); 
    var flag = true; 

    function bodyListen() { 
     $('body').on('mousewheel.bodyscroll', 
     function (e, delta, deltaX, deltaY) { 
      if(flag){ 
       e.preventDefault(); 
       flag = false; 
       moveit(); 
      } 
     }); 
    } 

    function moveit() { 
     tween = TweenMax.to(slide, 0.8, { 
      marginLeft: 300, 
      onComplete: function(){ 
       flag = true; 
      } 
     }); 
    } 

    bodyListen(); 
}); 
0

हालांकि मैं इस अपने आप को प्रयास नहीं किया है, TweenMax Kill Tweens of और KillAll है कि आप एक ट्वीन को मारने और वैकल्पिक रूप से उन्हें पूरा करने से पहले आप ऐसा करने की अनुमति नहीं है। हो सकता है कि आप जो चाहते हैं, क्योंकि यह एनीमेशन को खत्म करने के लिए मजबूर नहीं करेगा, लेकिन यह आपको उस स्थिति में वापस ले जाता है जिसे आप चाहते हैं और कोड डालने सरल है। समारोह bodyListen की शुरुआत में

function bodyListen() { 
    if(tween) tween.killAll(true) 
    ..... 
संबंधित मुद्दे