Heim  >  Artikel  >  Web-Frontend  >  Analyse der Implementierungsmethoden für Scrollen und Trägheitsbeschleunigung in der JS+HTML5-Mobiltelefonentwicklung

Analyse der Implementierungsmethoden für Scrollen und Trägheitsbeschleunigung in der JS+HTML5-Mobiltelefonentwicklung

高洛峰
高洛峰Original
2017-02-17 17:14:051644Durchsuche

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=&#39;content&#39;>内容区域</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(&#39;parent&#39;);
parent.addEventListener(&#39;touchstart&#39;, function(e) {
  // do touchstart
});
parent.addEventListener(&#39;touchmove&#39;, function(e) {
  // do touchmove
});
parent.addEventListener(&#39;touchend&#39;, function(e) {
  // do touchend
});

Schritt 3: Rolling Code implementieren

/**
 * 这里只实现垂直滚动
 */
var parent = document.getElementById(&#39;parent&#39;);
var content = document.getElementById(&#39;content&#39;)
var startY = 0; // 初始位置
var lastY = 0; // 上一次位置
parent.addEventListener(&#39;touchstart&#39;, function(e) {
  lastY = startY = e.touches[0].pageY;
});
parent.addEventListener(&#39;touchmove&#39;, function(e) {
  var nowY = e.touches[0].pageY;
  var moveY = nowY - lastY;
  var contentTop = content.style.top.replace(&#39;px&#39;, &#39;&#39;);
  // 设置top值移动content
  content.style.top = (parseInt(contentTop) + moveY) + &#39;px&#39;;
  lastY = nowY;
});
parent.addEventListener(&#39;touchend&#39;, function(e) {
  // do touchend
  var nowY = e.touches[0].pageY;
  var moveY = nowY - lastY;
  var contentTop = content.style.top.replace(&#39;px&#39;, &#39;&#39;);
  // 设置top值移动content
  content.style.top = (parseInt(contentTop) + moveY) + &#39;px&#39;;
  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(&#39;parent&#39;, {
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(&#39;parent&#39;);
var content = document.getElementById(&#39;content&#39;)
var startY = 0; // 初始位置
var lastY = 0; // 上一次位置
/**
 * 用于缓动的变量
 */
var lastMoveTime = 0;
var lastMoveStart = 0;
var stopInertiaMove = false; // 是否停止缓动
parent.addEventListener(&#39;touchstart&#39;, function(e) {
  lastY = startY = e.touches[0].pageY;
  /**
   * 缓动代码
   */
  lastMoveStart = lastY;
  lastMoveTime = e.timeStamp || Date.now();
  stopInertiaMove = true;
});
parent.addEventListener(&#39;touchmove&#39;, function(e) {
  var nowY = e.touches[0].pageY;
  var moveY = nowY - lastY;
  var contentTop = content.style.top.replace(&#39;px&#39;, &#39;&#39;);
  // 设置top值移动content
  content.style.top = (parseInt(contentTop) + moveY) + &#39;px&#39;;
  lastY = nowY;
  /**
   * 缓动代码
   */
  var nowTime = e.timeStamp || Date.now();
  stopInertiaMove = true;
  if(nowTime - lastMoveTime > 300) {
    lastMoveTime = nowTime;
    lastMoveStart = nowY;
  }
});
parent.addEventListener(&#39;touchend&#39;, function(e) {
  // do touchend
  var nowY = e.touches[0].pageY;
  var moveY = nowY - lastY;
  var contentTop = content.style.top.replace(&#39;px&#39;, &#39;&#39;);
  var contentY = (parseInt(contentTop) + moveY);
  // 设置top值移动content
  content.style.top = contentY + &#39;px&#39;;
  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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn