2015-10-15 13 views
6

मैं एक jQuery घटना है कि एक दूसरी घटना से चलाता है बनाने के लिए कोशिश कर रहा हूँ से चलाता है बनाना। पहली घटना इमोजी आईडी पर क्लिक कर रही है जो एक छवि को संदर्भित करती है। दूसरा एक मूसोम घटना है जो पृष्ठ के चारों ओर छवि को स्थानांतरित करता है। तीसरा कार्यक्रम इस घटना को रोकता है जब माउस क्लिक पृष्ठ के शरीर में कहीं भी होता है और छवि को उस पूर्ण स्थिति पर रखता है। मैं काम करने के लिए दूसरी और तीसरी घटनाएं प्राप्त करने में सक्षम था लेकिन मुझे दूसरी घटना के साथ काम करने के लिए पहली घटना नहीं मिल सकती। मेरे jQuery के लिए अब तक यह है:एक घटना है कि एक दूसरी घटना

var mouseTracker = function(event) { 
console.log(event.pageX, event.pageY, !!event.which) 
$('#emoji').css('top', event.pageY); 
$('#emoji').css('bottom', event.pageY); 
$('#emoji').css('left', event.pageX); 
$('#emoji').css('right', event.pageX); 
} 

var begin = function() { 
$('body').on('mousemove', mouseTracker); 
$('body').css('cursor', 'none'); 
} 

var stop = function() { 
$('body').off('mousemove', mouseTracker); 
$('#emoji').css('postion', 'absolute') 
$('body').css('cursor', 'default'); 
} 

$('#emoji').on('click', begin); 
$('body').on('click', stop);` 

उत्तर

2

ईवेंट को पहले ईवेंट कॉल के भीतर से शुरू करें।

$('#emoji').on('click', function() { 
    begin(); 
    $('body').on('click', stop); 
}); 
+0

यह काम नहीं कर सकता, क्योंकि संलग्न शरीर हैंडलर तुरंत शुरू हो रहा है: उस मामले में हैंडलर मैनुअल .off() बिना सर्वप्रथम प्रयोग के बाद अलग है। –

+0

मैं गलत हो सकता है - लेकिन क्यों यह अगर आप घटना वस्तु के लिए एक समारोह संदर्भ गुजर रहे हैं ट्रिगर कर रहा है? –

+0

घटना '# emoji' से' body' तक फैली हुई है। 'इमोजी' से मौजूद होने के बाद हैंडलर पर क्लिक करें, ईवेंट को 'स्टॉप()' तक प्रचारित किया जाता है, क्योंकि यह पहले ही संलग्न है। –

2
#emoji पर क्लिक शरीर क्लिक भी भी शुरू हो रहा है के दौरान

। कि stop() बुला की ओर जाता है। body है कि घटना के प्रसार event.stopPropagation() (या समतुल्य वापसी falsebegin() से) द्वारा अवरुद्ध किया जा सकता है। प्रचार मैन्युअल भले ही body क्लिक हैंडलर पर begin() में जुड़ा हुआ है बंद कर दिया जाना चाहिए।

आप कुछ घटनाओं में से एक समय उपयोग कर सकते हैं। यह .one() का उपयोग कर बाध्यकारी द्वारा किया जा सकता है। ,

var begin = function (event) {   
    $('body').on('mousemove', mouseTracker); 
    $('body').one('click', stop); 
    $('body').css('cursor', 'none'); 
    return false; // event.stopPropagation(); 
} 

var stop = function() { 
    $('#emoji').one('click', begin); 
    $('body').off('mousemove', mouseTracker); 
    $('#emoji').css('postion', 'absolute') 
    $('body').css('cursor', 'default'); 
} 

$('#emoji').one('click', begin); 
संबंधित मुद्दे