2011-12-19 11 views
11

अनिवार्य रूप से, मेरे पास फ्लैश सामग्री है जो माउस व्हील पर स्क्रॉल करती है। यह ठीक काम करता है, जब तक ब्राउजर में अन्य सामग्री न हो, ब्राउज़र की स्क्रॉलबार सक्षम हो - जब ऐसा होता है, तो माउस विंडो पर ब्राउज़र विंडो और मेरा एसडब्ल्यूएफ स्क्रॉल दोनों। क्या इस व्यवहार को सही करने का कोई तरीका है?एएस 3 में एक साथ ब्राउज़र और एसडब्ल्यूएफ माउस व्हील स्क्रॉलिंग को कैसे रोकें?

इसी प्रकार के प्रश्न यहाँ से पूछा:

disable mouse wheel scrolling while cursor over flex app?

समाधान का संदर्भ जो यहाँ के बारे में ब्लॉग:

http://www.spikything.com/blog/index.php/2009/11/27/stop-simultaneous-flash-browser-scrolling/

लेकिन समाधान सभी ब्राउज़रों पर काम नहीं करता है! हालांकि यह कुछ विंडोज ब्राउज़र पर काम करता है, यह मैक ओएस एक्स पर बिल्कुल काम नहीं करता है - यह फ़ायरफ़ॉक्स में माउस व्हील इवेंट पंजीकृत करता है, लेकिन उन्हें क्रोम और सफारी में बिल्कुल नहीं निकाल दिया जा रहा है।

अब मुझे पता है कि (आधिकारिक एडोब इंटरएक्टिव ऑब्जेक्ट डॉक्स के अनुसार) माउस व्हील माना जाता है कि केवल विंडोज सिस्टम पर ही समर्थित है, लेकिन ईवेंट अभी भी मैक ओएस एक्स पर डिफ़ॉल्ट रूप से निकाल दिया गया है। क्या यह एक साथ स्क्रॉल बग है क्योंकि यह समर्थित नहीं है ?

संपादित करें: इसके बाद के संस्करण समाधान के बारे में अधिक जानकारी जोड़ने ...

ध्यान दें कि ऊपर समाधान मूल रूप से ExternalInterface का उपयोग करता है "eval" समारोह के लिए निम्न JavaScript भेजने के लिए:

var browserScrolling; 

function allowBrowserScroll(value) { 
    browserScrolling = value; 
} 
function handle(delta) { 
    if (!browserScrolling) { 
     return false; 
    } 
    return true; 
} 
function wheel(event) { 
    var delta = 0; 
    if (!event) { 
     event = window.event; 
    } 
    if (event.wheelDelta) { 
     delta = event.wheelDelta/120; 
    } else if (event.detail) { 
     delta = -event.detail/3; 
    } 
    if (delta) { 
     handle(delta); 
    } 
    if (!browserScrolling) { 
     if (event.preventDefault) { 
      event.preventDefault(); 
     } 
     event.returnValue = false; 
    } 
} 
if (window.addEventListener) { 
    window.addEventListener('DOMMouseScroll', wheel, false); 
} 
window.onmousewheel = document.onmousewheel = wheel; 
allowBrowserScroll(true); 

इस है कम से कम सही रास्ते पर बिल्ली, या क्या एक बेहतर (यानी पूरी तरह कार्यात्मक) समाधान है?

उत्तर

0

वेबकिट घटनाओं तक पहुंचने के लिए आपको scroll और mousewheel की विविधताओं का परीक्षण करने की आवश्यकता हो सकती है। here देखें।

0

मेरा मानना ​​है कि आपको पृष्ठ पर जेएस में ईवेंट को हुक करना होगा, फिर डिफ़ॉल्ट को रोकना होगा, और ईवेंट को अपने फ़्लैश पर भेजें (डेल्टा)। आपके द्वारा पोस्ट किया गया कोड ऐसा लगता है कि यह कुछ हद तक सेट कर रहा है (डिफ़ॉल्ट को रोक रहा है) फिर भी मुझे नहीं पता कि कोड डोम को कहां लगा रहा है।

2

आप जावास्क्रिप्ट के माध्यम से पूरी तरह से ऐसा करने में सक्षम होना चाहिए ...

सबसे पहले आप "पहिया", "माउसव्हील" और भी "DOMMouseScroll" को सुनने के लिए की जरूरत है। It appears DOMMouseScroll is for Firefox only .....

दूसरी बात - यह एक छोटा सा बेहतर हो सकता है जावास्क्रिप्ट में पूरी तरह से यह करने के लिए:

// pseudo-code -- this tests for all "Objects" using not-so-standard elementFromPoint; 
// You can also look for the element directly using id 
    var fn = function(e) { 
     var element = document.elementFromPoint(e.pageX, e.pageY); 
     if (element && element.tagName === 'OBJECT') { 
      e.preventDefault(); 
      e.stopPropagation(); 
     } 
    } 

    window.addEventListener('DOMMouseScroll', fn); 
    window.addEventListener('mousewheel', fn); 
3

मैं एक छोटे से lib है कि आप के लिए सब कुछ संभालती बनाया। यह मिर्च फ्लैश और मैक-ओएस पर डिफ़ॉल्ट फ्लैश प्लेयर प्लगइन पर सही (जहां तक ​​मैंने परीक्षण किया) सही काम करता है। और आपको किसी भी .js फ़ाइलों को अपने HTML फ़ोल्डर में जोड़ने की आवश्यकता नहीं है

GIhub repo

संबंधित मुद्दे