• JavaScript动画


    动画原理

    核心原理 就是通过定时器setInterval()不断移动盒子的位置

     实现步骤:

           1.获得盒了当前位置

            2让盒子在当前位置加上1个移动距离

            3.利用定时器不断重复这个揉作

            4.加一个结束定时器的条件

            5.注意此元素需要添加定位,才能使用element.style.left

    1. div {
    2. width: 100px;
    3. height: 100px;
    4. background-color: pink;
    5. position: absolute;
    6. left: 0;
    7. }
    1. var div = document.querySelector("div");
    2. var timer= setInterval(function(){
    3. if(div.offsetLeft>=400){
    4. // 停止动画 本质是停止定时器
    5. clearInterval(timer);
    6. }
    7. div.style.left= div.offsetLeft+1+"px";
    8. },30)

     

    动画函数的简单封装

            简单动画函数封装obj目标对象target 目标位置

            给不同的元素指定了不同的定时器

    1. div {
    2. width: 100px;
    3. height: 100px;
    4. background-color: pink;
    5. position: absolute;
    6. left: 0;
    7. overflow: hidden;
    8. }
    9. span{
    10. position: absolute;
    11. left: 0;
    12. top: 200px;
    13. display: block;
    14. width: 150px;
    15. height: 150px;
    16. background-color: aqua;
    17. }
    1. <button>点击夏雨荷才走</button>
    2. <div></div>
    3. <span>夏雨荷</span>
    1. // 简单动画函数封装obj目标对象target 目标位置
    2. // 给不同的元素指定了不同的定时器
    3. function animate(obj,traget){
    4. // 当我们不断的点击按钮 这个元素的速度会越来越快,因为开启了太多的定时器
    5. // 解决方案 让我们元素只有一个定时器
    6. // 先清除以前的定时器 只保留当前的定时器执行
    7. clearInterval(obj.timer);
    8. obj.timer=setInterval(function(){
    9. obj.style.left=obj.offsetLeft+1+"px";
    10. if(obj.offsetLeft>=traget){
    11. // 停止动画,本质是停止定时器
    12. clearInterval(obj.timer);
    13. }
    14. },30)
    15. }
    16. var div=document.querySelector("div");
    17. var span=document.querySelector("span");
    18. var btn=document.querySelector("button");
    19. // 调用函数
    20. animate(div,200);
    21. btn.addEventListener("click",function(){
    22. animate(span,200);
    23. })

     

      缓动动画原理:

           1.让盒子每次移动的距离慢慢变小,速度就会慢慢落下来.

           2.核心算法︰(目标值-现在的位置)/ 10做为每次移动的距离步长

           3.停止的条件是:让当前盒子位置等于目标位置就停止定时器

    1. div {
    2. width: 100px;
    3. height: 100px;
    4. background-color: pink;
    5. position: absolute;
    6. left: 0;
    7. margin-top: 200px;
    8. }
    1. <div></div>
    2. <button class="btn500">点击盒子到500</button>
    3. <button class="btn800">点击盒子到800</button>
    1. var div=document.querySelector("div");
    2. function aminte(obj,traget){
    3. clearInterval(obj.timer)
    4. obj.timer=setInterval(function(){
    5. // 步长值写在定时器里面
    6. // 把我们步长值该为整数向上取整
    7. // var step=Math.ceil((traget-obj.offsetLeft)/10);
    8. var step=(traget-obj.offsetLeft)/10
    9. step= step>0? Math.ceil(step):Math.floor(step);
    10. obj.style.left=obj.offsetLeft+step+"px";
    11. if(obj.offsetLeft>=trager){
    12. // 停止动画,本质是停止定时器
    13. clearInterval(obj.timer)
    14. }
    15. },15);
    16. }
    17. var btn500=document.querySelector(".btn500");
    18. var btn800=document.querySelector(".btn800");
    19. btn500.addEventListener("click",function(){
    20. // 调用函数
    21. aminte(div,500)
    22. })
    23. btn800.addEventListener("click",function(){
    24. // 调用函数
    25. aminte(div,800)
    26. })
    27. // l.匀速动画就是 盒子是当前的位置 + 固定的值10
    28. // 2.缓动动画就是 盒子当前的位置 + 变化的值((目标值-现在的位置)/10)

     

  • 相关阅读:
    第一个实例:QT实现汽车电子仪表盘
    sql_mode详解
    考研:政治
    The specified module could not be found.
    【编程之路】面试必刷TOP101:动态规划(入门)(62-66,Python实现)
    计算机网络:流量控制与可靠传输机制
    二叉树详解
    EOS是什么?EOS和比特币、以太坊有什么区别?
    软考系统架构师知识点集锦四:信息安全技术基础知识
    [C#]JCoder.Db4Net.ORM,基于JCoder.Db4Net的ORM库,轻量的MIT协议类库
  • 原文地址:https://blog.csdn.net/helongzhi/article/details/125487500