• 动画函数,为任意一个元素移动到指定的目标位置


    一、动画缓冲函数

    /**
     * 动画函数
     * 任意一个元素移动到指定的目标位置
     * @param {*} element 任意一个元素
     * @param {*} target  目标位置(number类型)
     */
    function animate(element, target) {
        // 先清理定时器
        clearInterval(element.timeId);
        element.timeId = setInterval(function () {
            // 获取移动元素当前位置
            var current = my$("dv").offsetLeft;
            // 每次移动距离
            var step = 9;
            step = target > current ? step : -step;
            // 移动后的距离
            current +=step;
            // 判断是否到达目标位置
            if(Math.abs(target - current) > Math.abs(step)){
                my$("dv").style.left = current + "px";
            }else{
                clearInterval(element.timeId);
                my$("dv").style.left = target + "px";
            }
        }, 20);
    }
    

    二、html代码

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            div {
                 100px;
                height: 100px;
                position: absolute;
                top: 50px;
                left: 50px;
                border: 1px solid pink;
            }
        </style>
    </head>
    
    <body>
    
        <input type="button" value="移动到400px" id="btn" />
        <input type="button" value="移动到800px" id="btn2" />
        <div id="dv"></div>
    
        <script src="./js/common.js"></script>
    </body>
    </html>
    

    三、第三方js文件---common.js

    // 根据id获取元素对象
    function my$(id){
        return document.getElementById(id);
    }
    
    /**
     * 动画函数
     * 任意一个元素移动到指定的目标位置
     * @param {*} element 任意一个元素
     * @param {*} target  目标位置(number类型)
     */
    function animate(element, target) {
        // 先清理定时器
        clearInterval(element.timeId);
        element.timeId = setInterval(function () {
            // 获取移动元素当前位置
            var current = my$("dv").offsetLeft;
            // 每次移动距离
            var step = 9;
            step = target > current ? step : -step;
            // 移动后的距离
            current +=step;
            // 判断是否到达目标位置
            if(Math.abs(target - current) > Math.abs(step)){
                my$("dv").style.left = current + "px";
            }else{
                clearInterval(element.timeId);
                my$("dv").style.left = target + "px";
            }
        }, 20);
    }
    

    四、效果图

      初始位置截图

        

      初始位置---->400px处

        

      400px处----->800px处

        

      800px处----->400px处

        

      

     五、源码

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            div {
                 100px;
                height: 100px;
                position: absolute;
                top: 50px;
                left: 50px;
                border: 1px solid pink;
            }
        </style>
    </head>
    
    <body>
    
        <input type="button" value="移动到400px" id="btn" />
        <input type="button" value="移动到800px" id="btn2" />
        <div id="dv"></div>
    
        <!-- 引入第三方js文件 -->
        <script src="./js/common.js"></script>
        <script>
            my$("btn").onclick = function(){
                animate(my$("dv"),400);
            }
    
            my$("btn2").onclick = function(){
                animate(my$("dv"),800);
            }
        </script>
    </body>
    </html>
    

      

  • 相关阅读:
    HTTP与HTTPS的区别
    为什么我们越努力 越不安
    最可怕的是牛人还那么努力
    Canvas、Paint、的简单使用及辅助类(Path、Shader、简介)
    创建style和修改style
    Drawable类及XMLDrawable的使用
    反射机制
    Gesture(手势)浅析
    在外部存储器上写入或读取文件(Environment类、File类的使用)
    存储、读取——Android应用程序内置的文件夹
  • 原文地址:https://www.cnblogs.com/mycnblogs-guoguo/p/11242300.html
Copyright © 2020-2023  润新知