2012-01-22 15 views
8

में खींचते समय एक href को कैसे क्लिक न करें मेरे पास my page पर iScroll सक्षम है।iScroll

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

+0

मैं एक महसूस कर रही है कि लिंक पर एक श्रोता रखने जाने का रास्ता है के लिए जाँच करें। अर्थात। जब एक लिंक क्लिक किया जाता है (जो इस मामले में गलती से हो रहा है) यह डिफ़ॉल्ट व्यवहार को रोकता है, तो जांचता है कि उपयोगकर्ता स्क्रॉल करते हैं और यदि लिंक को तब भी नहीं खोलता है? उम्मीद है कि यह आपको या किसी और को प्रेरित करता है। (मुझे यह जानना अच्छा लगेगा कि यह जाने का तरीका _not_ है) – Joep

+0

क्या आपको अभी भी आईओएस 5 के साथ आईस्क्रॉल की आवश्यकता है? '-webkit-overflow-scrolling का उपयोग क्यों न करें: – Matijs

+0

स्पर्श करें मैं डेस्कटॉप और मोबाइल दोनों पर समान कार्यक्षमता रखना चाहता हूं। यह केवल एकमात्र है जिसे मैं जानता हूं ठीक है। उपयोगकर्ता समीक्षा आदि के अनुसार –

उत्तर

3

मैं कहूंगा कि स्क्रॉलर को खींचने के दौरान प्रत्येक एंकर को कक्षा जोड़ना होगा। उदाहरण के लिए ड्रैग किए जाने पर प्रत्येक एंकर को "ड्रैगिंग" का क्लास नाम संलग्न करें, फिर स्टॉप खींचते समय कक्षा को हटा दें।

इसका मतलब है कि आप किसी भी लिंक पर रोकथाम को जोड़ सकते हैं जिसमें "ड्रैगिंग" वर्ग है। की तर्ज पर कुछ:

myScroll1 = new iScroll('scroll1', { 
     snap: 'li', 
     momentum: false, 
     hScrollbar: false, 
     onScrollStart: function() { 
      $('div#iscroll1 a').addClass("dragging"); 
     }, 
     onScrollEnd: function() { 
      $('div#iscroll1 a').removeClass("dragging"); 
      document.querySelector('.indicator > li.active').className = ''; 
      document.querySelector('.indicator > li:nth-child(' + (this.currPageX+1) + ')').className = 'active'; 
     } 
    }); 
    $('.dragging').click(function (e) { 
     e.preventDefault(); 
    } 

हालांकि यह अपरीक्षित कोड ताकि आप चयनकर्ताओं को परिष्कृत करने की आवश्यकता हो सकती है।

+0

एक साइड नोट के रूप में भी। स्क्रोलर IE8 में मेरे लिए काम नहीं करता है। यह एक त्रुटि के साथ मर जाता है: ऑब्जेक्ट इस संपत्ति या विधि का समर्थन नहीं करता है लाइन: 52 चार: 5 कोड: 0 – Zappa

3

मैंने आईएसक्रॉल पर एक पैच बनाया है जो इस समस्या को हल करता है। https://github.com/zmathew/iscroll/commit/3d77681a9f4b3a6b5a7579df4443bc53356d5584

वैकल्पिक रूप से आप यहां से iScroll के पूरे समझौता संस्करण हड़पने कर सकते हैं:: आप diff यहाँ देख सकते हैं डाउनलोड करने के लिए https://github.com/zmathew/iscroll/tree/prevent-scroll-clicks

+0

नए पैच किए गए संस्करण के लिए धन्यवाद! और बस समय में, भाग्यशाली मुझे! – Yisela

+2

क्या इस पैच का नया संस्करण (4.2) iscroll संस्करण के लिए है? – Alvaro

-2

हैलो iScroll 4.2.5 के यहां संशोधित किया गया है संस्करण

iScroll 4.2.5 + click fix

onBeforeScrollStart: function (e) {if(!hasTouch) e.preventDefault();}, 
0

समाधान मेरे लिए काम नहीं किया है, यह मेरा सरल तय है। ड्रैग करते समय सत्य पर खींचें सेट करें, इसे गलत पर सेट करें। खींचते समय क्लिक करें, इसे अनदेखा करें।

var myScroll = new iScroll("scroll1", { onBeforeScrollMove: function() { 
      window.dragging = true; 
     }, 
      onScrollEnd: function() { 
       //had to use a timeout here because without it it would fire on links at the end of the drag/dragging slowly 
       setTimeout(function() { 
        window.dragging = false; 
       }, 10); 
      } 

     }); 

और एंकर पर खींचकर

$(".myanchors a").click(function() { 
     if (window.dragging) { 
      return false; 
     } 
    }); 
संबंधित मुद्दे