zoukankan      html  css  js  c++  java
  • JS-基础动画心得

    写在前面的话:这两种动画方式主要在于对其中算法的理解,理解其中的向上和向下取整很关键.还有一个我犯的毛病,写样式的时候忘记给轮播图ul定位,导致效果出不来,所以有bug时记得排除下css

    常用的三种动画移动方式:

    1. 闪动,直接修改style属性值,从一个地方闪现到另一个地方,反正很丑-.-
    2. 匀速移动 (已经说的很直白了╰( ̄▽ ̄)╭也很丑)
       1 //匀速移动动画
       2         function uniform(ele,target) {
       3             //会出现移动越来越快是因为开启了多个定时器,故每次开启定时器之前都清除掉之前的定时器
       4             clearInterval(timer);
       5             var speed = (target > ele.offsetLeft) ? 10 : -10;
       6             timer = setInterval(function() {
       7                 //增加变量,可以判断目标值和当前位置的差值正负,以此来决定步长的正负
       8                 var val = target - ele.offsetLeft;
       9                 ele.style.left = ele.offsetLeft + speed + "px";
      10                 if (Math.abs(val) <= Math.abs(speed)) {
      11                     ele.style.left = target + "px";
      12                     clearInterval(timer);
      13                 }
      14             },50);
      15         }

      传入一个要移动的对象,每50毫秒向左匀速移动10px(当时因为一个css问题整了好久才实现的轮播图功能)在不够一个步长的时候,直接二次赋值把目标位置的值赋给对象

    3. 缓变动画(先快后慢,结束时有一个缓冲的过程,跟上边的完全不是一家人)
      //缓动移动动画
              function slow(ele,target) {
                  clearInterval(ele.timer);   //使用前先清除定时器
                  ele.timer = setInterval(function () {
                      var speed = (target - ele.offsetLeft) / 10;        //距离目标位置越近,步长越来越小
                      speed = target > ele.offsetLeft ? Math.ceil(speed) : Math.floor(speed);
                      ele.style.left = ele.offsetLeft + speed + "px"; //缓动动画的本质,盒子目标的位置=当前位置+步长if (Math.abs(target-ele.offsetLeft) < Math.abs(speed)) {
                          ele.style.left = target + "px";
                          clearInterval(ele.timer);
                      }
                  },30);
              }

      (target - ele.offsetLeft) / 10这句话是缓动移动的关键,步长会因为离目标点变近而越来越小

        需要注意的是,offsetLeft取值的方式是按照四舍五入的方式取值,所以在剩最后10px时,每次移动1px,可以避免出现无限循环(无限循环小数)

  • 相关阅读:
    HDOJ 4747 Mex
    HDU 1203 I NEED A OFFER!
    HDU 2616 Kill the monster
    HDU 3496 Watch The Movie
    Codeforces 347A A. Difference Row
    Codeforces 347B B. Fixed Points
    Codeforces 372B B. Hungry Sequence
    HDU 1476 Sudoku Killer
    HDU 1987 How many ways
    HDU 2564 词组缩写
  • 原文地址:https://www.cnblogs.com/missjingjing/p/8597493.html
Copyright © 2011-2022 走看看