2011-02-10 12 views
15

मैं निम्नलिखित कोड स्निपेट हैंjQuery निरंतर mousedown

$(document).mousedown(function(event) { 
    doSomething(); 
} 

मैं सफलतापूर्वक mousedown घटना पर कब्जा कर सकते हैं।

मैं निम्न कार्य करने की कोशिश कर रहा हूँ:

  1. कब्जा पहले mousedown घटना
  2. मैं अगर उपयोगकर्ता अभी भी माउस को पकड़कर है तो मैं कुछ और कर सकते हैं पता लगाने के लिए चाहते हैं।

उत्तर

24

कुछ

तरह
var mouseStillDown = false; 

$(document).mousedown(function(event) { 
    mouseStillDown = true; 
    doSomething(); 
}); 

function doSomething() { 
    if (!mouseStillDown) { return; } // we could have come back from 
            // SetInterval and the mouse is no longer down 
    // do something 

    if (mouseStillDown) { setInterval("doSomething", 100); } 
} 

$(document).mouseup(function(event) { 
    mouseStillDown = false; 
}); 
+0

आपका मतलब था .... setInterval ("doSomething", 100); – mrbinky3000

+0

बेहतर अभी तक: setInterval ("doSomething()", 100); और आपको अंतराल के संदर्भ को संग्रहीत करना चाहिए और फिर सेटइंटरवाल को दोबारा कॉल करने से पहले इसे साफ़ करें (यदि आवश्यक हो), अन्यथा आप एक साथ चलने वाले कई अंतराल के साथ समाप्त हो सकते हैं। – HaukurHaf

+5

यदि मुझे गलत नहीं है, तो कोड के ऊपर एक ही समय में चलने वाले कई एक साथ अंतराल उत्पन्न होंगे, जो लगातार और अधिक बनाते हैं, जो वास्तव में भयानक है। एक अंतराल के साथ सही समाधान जिसे साफ़ किया जाता है, यहां है: http://stackoverflow.com/a/8010163/2855804 – Leonya

1

आपको mouseDown पर कुछ करने की आवश्यकता होगी, कुछ करना शुरू करें और mouseUp ईवेंट तक इसे जारी रखना जारी रखें।

+0

मैं इसे कैसे जारी रख सकता हूं? SetInterval() का उपयोग करना? धन्यवाद। – pion

5

आप कुछ प्रत्यावर्तन लागू होगी!

var mouseisdown = false; 

$(document).mousedown(function(event) { 
    mouseisdown = true; 
    doSomething(); 
}).mouseup(function(event) { 
    mouseisdown = false; 
}); 

function doSomething(){ 
    //Code goes here 
    if (mouseisdown) 
     doSomething(); 
} 
1

ध्वज सेट करने के लिए ध्वज सेट करने के लिए mousedown ईवेंट का उपयोग करें और ध्वज को अनसेट करने के लिए माउसअप का उपयोग करें। फिर आप यह देखने के लिए ध्वज की जांच कर सकते हैं कि यह सेट है या नहीं।

उदाहरण के

var mouseDownFlag = false; 
$(document).mousedown(function(event) { 
    mouseDownFlag = true; 
    someFunc(); 
} 
$(document).mouseup(function(event) { 
    mouseUpFlag = true; 
} 
var someFunc = function(){ 
    if(mouseDownFLag){//only run this function when the mouse is clicked 
    // your code 
     setTimeout("somefunc()", 1000); //run this function once per second if your mouse is down. 
    } 
} 

आशा है कि मदद करता है!

16
var int00; // declared here to make it visible to clearInterval. 

$('#trigger').mousedown(function(){ 
    int00 = setInterval(function() { repeatingfunction(); }, 50); 
}).mouseup(function() { 
    clearInterval(int00); 
}); 

function repeatingfunction() { 
    // This will repeat // 
} 

तुम भी mouseleave घटना पर एक clearInterval डाल सकते हैं।

+1

सुरुचिपूर्ण समाधान, लेकिन एक छोटा टाइपो .. सेट इंटरवल :) –

+0

और संपादक द्वारा एक छोटा सा टाइपो: इसकी var int00; var int100 नहीं; – Steckdoserich

1
$(document).ready(function(){ 

    var mouseStillDown = false; 

    $('#some_element').mousedown(function() { 
    do_something(); 
    }).mouseup(function() { 
    clearInterval(mouseStillDown); 
    mouseStillDown = false; 
    }); 

    function do_something() { 

    // add some code here that repeats while mouse down 

    if (!mouseStillDown) { 
     mouseStillDown = setInterval(do_something, 100); 
    } 

    } 

}); 
संबंधित मुद्दे