Bu soruna iScroll ile ivme kaydırma hissi ve her şeyle harika bir çözüm bulabildim https://github.com/cubiq/iscroll Github belgesi harika ve çoğunlukla onu takip ettim. İşte uygulamamın ayrıntıları.
HTML:
İçeriğimin kaydırılabilir alanını iScroll'un kullanabileceği bazı div'lere sardım:
<div id="wrapper">
<div id="scroller">
... my scrollable content
</div>
</div>
CSS:
Stil değişikliklerimi yalnızca dokunmatik cihazlara hedeflemek için "dokunma" için Modernizr sınıfını kullandım (çünkü yalnızca dokunulduğunda iScroll'u başlattım).
.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%;
}
JS:
iScroll indirmesinden iscroll-probe.js'yi ekledim ve ardından kaydırma çubuğunu aşağıdaki gibi başlattım; burada updatePosition, yeni kaydırma konumuna tepki veren işlevimdir.
# coffeescript
if Modernizr.touch
myScroller = new IScroll('#wrapper', probeType: 3)
myScroller.on 'scroll', updatePosition
myScroller.on 'scrollEnd', updatePosition
Kaydırma ofsetine bakmak yerine, geçerli konumu şimdi almak için myScroller'ı kullanmanız gerekir. İşte http://markdalgleish.com/presentations/embracingtouch/ adresinden alınan bir işlev (süper yararlı bir makale, ancak şu anda biraz modası geçmiş)
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};
}
Aldığım diğer tek şey, ara sıra sayfamın kaydırmaya çalıştığım bir kısmını kaybediyordum ve kaydırmayı reddediyordu. #Wrapper'ın içeriğini her değiştirdiğimde myScroller.refresh () 'e bazı çağrılar eklemem gerekiyordu ve bu sorunu çözdü.
DÜZENLEME: Başka bir fark, iScroll'un tüm "tıklama" olaylarını yemesiydi. İScroll'un bir "dokunma" olayı yayması ve "tıklama" olayları yerine bunları işlemesi seçeneğini etkinleştirdim. Neyse ki kaydırma alanına fazla tıklamaya ihtiyacım yoktu, bu yüzden bu önemli bir şey değildi.
window.pageYOffset
değil, sadece çalışıyordudocument.body.scrollTop||document.documentElement.scrollTop
.