मैं के साथ, iScroll के साथ इस समस्या के लिए एक महान समाधान प्राप्त करने में सक्षम था गति स्क्रॉलिंग का सब कुछ और सब कुछ https://github.com/cubiq/iscroll गीथब दस्तावेज़ महान है, और मैं ज्यादातर इसका पालन करता हूं। मेरे कार्यान्वयन का विवरण यहां दिया गया है।
HTML: मुझे लगता है कि iScroll उपयोग कर सकते हैं कुछ divs में मेरी सामग्री की स्क्रॉल करने योग्य क्षेत्र लिपटे:
<div id="wrapper">
<div id="scroller">
... my scrollable content
</div>
</div>
सीएसएस: मैं मेरी शैली को लक्षित करने के "स्पर्श" के लिए Modernizr वर्ग के लिए इस्तेमाल किया केवल डिवाइस को स्पर्श करने के लिए परिवर्तन (क्योंकि मैंने केवल स्पर्श पर iScroll को तुरंत चालू किया)।
.touch #wrapper {
position: absolute;
z-index: 1;
top: 0;
bottom: 0;
left: 0;
right: 0;
overflow: hidden;
}
.touch #scroller {
position: absolute;
z-index: 1;
width: 100%;
}
जे एस: मैं iScroll डाउनलोड से iscroll-probe.js शामिल, और फिर उस नई पुस्तक स्थिति के प्रति प्रतिक्रिया के रूप में नीचे है, जहां updatePosition मेरी समारोह है स्क्रोलर प्रारंभ।
# coffeescript
if Modernizr.touch
myScroller = new IScroll('#wrapper', probeType: 3)
myScroller.on 'scroll', updatePosition
myScroller.on 'scrollEnd', updatePosition
आप myScroller का उपयोग करने के बजाय स्क्रॉल ऑफसेट को देखने का, अब वर्तमान स्थिति प्राप्त करने के लिए किया है। यहाँ एक समारोह http://markdalgleish.com/presentations/embracingtouch/ से लिया (एक सुपर उपयोगी लेख है, लेकिन अब पुराने हो चुके एक छोटे से)
function getScroll(elem, iscroll) {
var x, y;
if (Modernizr.touch && iscroll) {
x = iscroll.x * -1;
y = iscroll.y * -1;
} else {
x = elem.scrollTop;
y = elem.scrollLeft;
}
return {x: x, y: y};
}
केवल अन्य पकड़ लिया गया था कभी-कभी मैं अपने पृष्ठ है कि मैं करने के लिए स्क्रॉल करने के लिए कोशिश कर रहा था का हिस्सा खो देगा है, और यह स्क्रॉल करने से इंकार कर देगा। जब भी मैंने #wrapper की सामग्री को बदल दिया, और समस्या को हल किया, तो मुझे myScroller.refresh() में कुछ कॉल जोड़ना पड़ा।
संपादित करें: एक अन्य गोचा था कि iScroll सभी "क्लिक" घटनाओं को खाता है। मैंने आईएसक्रॉल को "टैप" ईवेंट उत्सर्जित करने का विकल्प चालू कर दिया और "क्लिक" ईवेंट के बजाय उन्हें संभाला। शुक्र है कि मुझे स्क्रॉल क्षेत्र में ज्यादा क्लिक करने की आवश्यकता नहीं थी, इसलिए यह एक बड़ा सौदा नहीं था।
धन्यवाद, जिसने मुझे समस्या पर आगे देखने के लिए मजबूर किया। असली जवाब था iphone पर व्यूपोर्ट के शीर्ष का पता लगाने/iPad केवल साथ काम करता है 'window.pageYOffset' और नहीं ' document.body.scrollTop || document.documentElement.scrollTop' की तरह अस्तित्व में हर दूसरे ब्राउज़र/हार्डवेयर। –
@ck_ दुर्भाग्य से आईपीएडी 'window.pageYOffset' पर मंदीकरण चरण में अद्यतन नहीं होता है, लेकिन केवल स्क्रॉल खत्म होने पर ही। – Adaptabi
विंडो.ऑनक्रॉल को सीधे ओवरराइट करने के लिए यह खराब प्रथा है। एक ईवेंट श्रोता जोड़ना बेहतर होगा। Window.addEventListener ('स्क्रॉल', फ़ंक्शन() {अलर्ट ('स्क्रॉल किया गया!');}) का उपयोग करें; –