Das Beispiel in diesem Artikel beschreibt die Implementierungsmethode des Scrollens und der Trägheitsbeschleunigung in der JS+HTML5-Mobiltelefonentwicklung. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
1 Im Folgenden sind drei Implementierungsmethoden für das Scrollen aufgeführt:
1) Verwenden Sie den nativen CSS-Attributüberlauf: scroll p id= parent style = overflow: scroll; pid='content' content area/p /p Hinweis: Nach dem Scrollen kehrt es zum oberen Inhaltsbereich zurück. Die Lösung besteht darin, dies zu erreichen
2) Idee zur Implementierung der js-Programmierung: Vergleichen Sie die Positionsänderungen vor und nach der Bewegung des Fingers auf dem Bildschirm und ändern Sie den Inhalt des Inhaltselements
1 Scrollen
Das Folgende ist Drei Implementierungsmethoden:
1) Verwenden Sie natives CSS-Attributüberlauf: scroll
<p id="parent" style="overflow:scroll;> <p id='content'>内容区域</p> </p>
Hinweis:
hat Ein Fehler in Android, es kehrt nach dem Scrollen zum Anfang zurück. Für den Inhaltsbereich besteht die Lösung darin, die beiden letztgenannten Methoden zu verwenden, um
2) js-Programmierung
Idee: Vergleichen Sie die Position ändert sich, bevor und nachdem der Finger auf dem Bildschirm bewegt wird, um die Position des Inhaltselements zu ändern
Schritt 1: Stellen Sie den Überlauf des übergeordneten Elements auf „Ausgeblendet“ ein, setzen Sie die Position des Inhalts auf „relativ“ und setzen Sie oben auf 0;
Schritt 2: Auf Berührungsereignisse achten
var parent = document.getElementById('parent'); parent.addEventListener('touchstart', function(e) { // do touchstart }); parent.addEventListener('touchmove', function(e) { // do touchmove }); parent.addEventListener('touchend', function(e) { // do touchend });
Schritt 3: Rolling Code implementieren
/** * 这里只实现垂直滚动 */ var parent = document.getElementById('parent'); var content = document.getElementById('content') var startY = 0; // 初始位置 var lastY = 0; // 上一次位置 parent.addEventListener('touchstart', function(e) { lastY = startY = e.touches[0].pageY; }); parent.addEventListener('touchmove', function(e) { var nowY = e.touches[0].pageY; var moveY = nowY - lastY; var contentTop = content.style.top.replace('px', ''); // 设置top值移动content content.style.top = (parseInt(contentTop) + moveY) + 'px'; lastY = nowY; }); parent.addEventListener('touchend', function(e) { // do touchend var nowY = e.touches[0].pageY; var moveY = nowY - lastY; var contentTop = content.style.top.replace('px', ''); // 设置top值移动content content.style.top = (parseInt(contentTop) + moveY) + 'px'; lastY = nowY; });
Schritt 4: Optimieren
Der obige Code ist in Der Laufeffekt auf dem Mobiltelefon ist viel langsamer als auf dem PC
Für den Optimierungsteil: siehe:
3) Verwenden Sie das iScroll4-Framework
var scroll = new iScroll('parent', { hScrollbar: false, vScrollbar: true, checkDOMChanges : true });
Offizielle Website des Frameworks: http://www.php.cn/
2. Trägheitserleichterung
Idee: Nehmen Sie die durchschnittliche Geschwindigkeit v des Fingers, der in der letzten Zeitspanne über den Bildschirm gewischt hat, und lassen Sie v sich entsprechend einer abnehmenden Funktion ändern, bis v<=0
/** * 这里只实现垂直滚动 */ var parent = document.getElementById('parent'); var content = document.getElementById('content') var startY = 0; // 初始位置 var lastY = 0; // 上一次位置 /** * 用于缓动的变量 */ var lastMoveTime = 0; var lastMoveStart = 0; var stopInertiaMove = false; // 是否停止缓动 parent.addEventListener('touchstart', function(e) { lastY = startY = e.touches[0].pageY; /** * 缓动代码 */ lastMoveStart = lastY; lastMoveTime = e.timeStamp || Date.now(); stopInertiaMove = true; }); parent.addEventListener('touchmove', function(e) { var nowY = e.touches[0].pageY; var moveY = nowY - lastY; var contentTop = content.style.top.replace('px', ''); // 设置top值移动content content.style.top = (parseInt(contentTop) + moveY) + 'px'; lastY = nowY; /** * 缓动代码 */ var nowTime = e.timeStamp || Date.now(); stopInertiaMove = true; if(nowTime - lastMoveTime > 300) { lastMoveTime = nowTime; lastMoveStart = nowY; } }); parent.addEventListener('touchend', function(e) { // do touchend var nowY = e.touches[0].pageY; var moveY = nowY - lastY; var contentTop = content.style.top.replace('px', ''); var contentY = (parseInt(contentTop) + moveY); // 设置top值移动content content.style.top = contentY + 'px'; lastY = nowY; /** * 缓动代码 */ var nowTime = e.timeStamp || Date.now(); var v = (nowY - lastMoveStart) / (nowTime - lastMoveTime); //最后一段时间手指划动速度 stopInertiaMove = false; (function(v, startTime, contentY) { var dir = v > 0 ? -1 : 1; //加速度方向 var deceleration = dir*0.0006; var duration = v / deceleration; // 速度消减至0所需时间 var dist = v * duration / 2; //最终移动多少 function inertiaMove() { if(stopInertiaMove) return; var nowTime = e.timeStamp || Date.now(); var t = nowTime-startTime; var nowV = v + t*deceleration; // 速度方向变化表示速度达到0了 if(dir*nowV < 0) { return; } var moveY = (v + nowV)/2 * t; content.style.top = (contentY + moveY) + "px"; setTimeout(inertiaMove, 10); } inertiaMove(); })(v, nowTime, contentY); });
Ich hoffe, dass dieser Artikel allen in der jQuery-Programmierung hilfreich sein wird.
Weitere Analysen zu den Implementierungsmethoden von Scrollen und Trägheitsbeschleunigung in der JS+HTML5-Mobiltelefonentwicklung finden Sie auf der chinesischen PHP-Website!