JSAPI笔记6

时间:2019/10/22

5).动画函数封装
1.动画实现原理:通过定时器setInterval()不断移动盒子位置(具有定位属性的盒子)。停止动画本质是停止定时器。
2.动画函数简单封装(需要传递目标对象和目标位置两个参数)

<script type="text/javascript">
  var box = document.querySelector('.box');

  animate(box, 800);

  function animate(obj, target) {
    // 解决不断触发事件生成多个定时器问题
    if (obj.timer) clearInterval(obj.timer);
    // 给不同元素指定定时器,性能优化
   obj.timer = setInterval(function() {
      if (obj.offsetLeft == target) {
        clearInterval(obj.timer);
      } else {
        // 此时步长都为1,匀速效果运动
        obj.style.left = obj.offsetLeft + 1 + 'px';
      }
    }, 15);
  }
        
</script>

3.缓动动画原理:让盒子每次移动的距离慢慢变小,速度慢慢减小(减速效果)。
核心算法:(目标位置 - 当前位置)/ 10 值作为每次移动的的步长

function animate(obj, target) {
  if (obj.timer) clearInterval(obj.timer);
  obj.timer = setInterval(function() {
    var step = (target - obj.offsetLeft) / 10;
    if (step == 0) {
      clearInterval(obj.timer);
    } else {
      // 步长取整,避免因小数运算而达不到目标距离
      // 正向滑动,步长向上取整;反向滑动,步长向下取整
      step = step > 0 ? Math.ceil(step) : Math.floor(step);
      obj.style.left = obj.offsetLeft + step + 'px';
     }
  }, 15);
}

4.动画函数封装
PS:回调函数原理(将函数作为参数传递到另一个函数中,当另一个函数执行完之后,再执行传递进去的函数)

function animate(obj, target, callBack) {
  if (obj.timer) clearInterval(obj.timer);
  obj.timer = setInterval(function() {
    var step = (target - obj.offsetLeft) / 10;
    if (step == 0) {
      clearInterval(obj.timer);
      // 添加回调函数,存在时,在动画执行完之后执行(短路运算)
      callBack && callBack();
    } else {
      step = step > 0 ? Math.ceil(step) : Math.floor(step);
      obj.style.left = obj.offsetLeft + step + 'px';
    }
  }, 15);
}

5.轮播图案例思路:


功能简介.jpg

显示隐藏.jpg

底部圆钮.jpg

点击圆钮.jpg

左右按钮.jpg

按钮与圆钮联动.jpg

自动播放.jpg

PS:轮播图加上节流阀(定义flag变量),防止左右按钮快速点击使图片切换过快。
(执行某个事件函数时打开节流阀(flag = false),在某个回调中关闭节流阀(flag = true),每次触发事件时判断flag状态)

6.返回顶部案例思路:


页面滚动.jpg

动画返回顶部.jpg

7.筋斗云案例思路:


功能介绍.jpg

具体操作.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 信号处理 傅里叶变换 F(t) = F_0 + \sum_{n=1}^{\infty}(A_ncos(n\Omeg...
    逑飯阅读 2,393评论 0 1
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,615评论 0 7
  • 这些天在参加cp学社的学习,每天要输出语音三分钟。刚开始,我做笔记写稿,流得很顺畅;后来,我尝试写提纲脱稿,可内心...
    彤达阅读 211评论 2 6
  • 二宝昨天感冒,请假不上学。他说去凉茶铺买感冒凉茶给他喝。其实感冒凉是不单纯属‘’凉‘’的那类,更多是属伤寒里‘驱寒...
    微言不语阅读 242评论 0 0