2012-11-08 24 views
6

मैं एक ईवेंट को कैप्चर करना चाहता हूं जब कोई उपयोगकर्ता स्क्रॉल व्हील को उस स्थिति में स्क्रॉल करता है जहां पृष्ठ स्क्रॉल नहीं होता/स्क्रॉल करने योग्य नहीं होता है। हालांकि, मानक जेएस स्क्रॉल इवेंट केवल तब ही आग लग जाता है जब ब्राउज़र वास्तव में स्क्रॉल करता है, और अतिप्रवाह छिपाने के लिए स्टाइल किए गए डीओएम तत्व के लिए आग नहीं लगाएगा।स्क्रॉल व्हील घटनाक्रम कैप्चरिंग

Google मानचित्र 'ज़ूम करने के लिए स्क्रॉल एक प्रकार का व्यवहार है जिसे मैं ढूंढ रहा हूं।

क्या किसी को भी ऐसा कोई विचार है कि इस तरह कुछ कैसे पूरा किया जाए?

धन्यवाद।

+1

यह फ़ायरफ़ॉक्स और क्रोम में काम करता है। ** लाइव डेमो: ** http://jsfiddle.net/chtNP/1/ –

+0

यह संस्करण के आधार पर आईई या ओपेरा में बहुत अच्छा काम नहीं करेगा (देखें http://www.adomas.org/javascript- माउस-व्हील /) – Kelvin

+0

@ केल्विन मैके मैंने आईई 9, और आईई 8 में परीक्षण किया है, और यह काम करता है। –

उत्तर

10

आप माउस पर कब्जा कर सकते हैं -wheel घटना ठीक:

$('#yourElement').on('DOMMouseScroll mousewheel', function() { 
    ... 
}); 

लाइव डेमो:http://jsfiddle.net/chtNP/1/

(। मैं ईवेंट हैंडलर बाध्य करने के लिए jQuery का उपयोग कर रहा है, लेकिन यह जो एपीआई आप निश्चित रूप से उपयोग करते हैं, की परवाह किए बिना काम करता है)

+0

बिल्कुल सही, धन्यवाद, मुझे उस घटना के बारे में पता नहीं था और इसे मेरे गुगल में याद किया होगा। – Zev

+0

क्या यह निर्धारित करना संभव है कि उपयोगकर्ता ऊपर या नीचे स्क्रॉल कर रहा है या नहीं? –

+0

@RobinCastlin हां। स्क्रॉल इवेंट उस के लिए एक संपत्ति प्रदान करता है। इसके कुछ अलग-अलग कार्यान्वयन हैं, हालांकि ब्राउज़र में मूल्य प्राप्त करने के लिए आपको थोड़ा-सा कोड लिखना होगा। –

0

jQuery के साथ, आप this plugin, या इसी तरह की किसी भी संख्या का उपयोग कर सकते हैं जो एक ही काम करते हैं।

jQuery या किसी ऐसे ही ढांचे एक विकल्प नहीं है, तो यह संभव है, लेकिन जब आप इसे एक से अधिक ब्राउज़र में काम करना चाहते हैं दर्द की एक दुनिया के लिए अपने आप को तैयार ...

+0

यदि आपको दस्तावेज़ों को पढ़ना है (जैसे मैंने किया) तो jQuery के बिना इसे लागू करने में अधिक समय लगता है। लेकिन मैं इसे दर्द की दुनिया नहीं कहूंगा, खासकर यदि आप बस मेरे समाधान को पेस्ट करें। – Rolf

2

इस समय, फ़ायरफ़ॉक्स DOMMouseScroll और व्हील ईवेंट को परिभाषित करता है। क्रोम, ओपेरा और आईई (नवीनतम, फिर से!) mousewheel परिभाषित करें।

इस तरह मैंने किया:

if(window.onwheel !== undefined) { 
    window.addEventListener('wheel', onMouseWheel) 
} else if(window.onmousewheel !== undefined) { 
    window.addEventListener('mousewheel', onMouseWheel) 
} else { 
    // unsupported browser 
} 

नोट है कि पुराने आईई संस्करण में addEventListener समर्थन एक polyfill की जरूरत है। वैकल्पिक रूप से आप पुरानी विंडो का उपयोग कर सकते हैं। Mousewheel = function() {} या जो भी विधि।

जैसा कि आप देख सकते हैं, ईवेंट श्रोता विंडो ऑब्जेक्ट से जुड़ा हुआ है। आप क्रॉस-ब्राउज़र फैशन में तत्वों से इसे संलग्न नहीं कर सकते हैं। आप इवेंट ऑब्जेक्ट लक्ष्य प्रॉपर्टी का उपयोग यह देखने के लिए कर सकते हैं कि यह कहां ट्रिगर किया गया था, और उस आधार पर एक फ़िल्टर करें।

पीएस: एक और क्रॉस-ब्राउज़र विचार: आईई में, आपको कॉलबैक फ़ंक्शन ("onMouseWheel") में प्रोसेस करते समय ईवेंट ऑब्जेक्ट के अंदर "व्हीलडेल्टा" प्रॉपर्टी (और इसे साइन इन करें!) का उपयोग करना होगा। अन्य ब्राउज़रों क्षैतिज स्क्रॉलिंग के लिए "डेल्टा" (या "डेल्टाएक्स" पॉप्युलेट करेंगे)।