zoukankan      html  css  js  c++  java
  • 原生javascript 基础动画函数封装(二)

    <!DOCTYPE html>
    <html>
    <head>
    <title></title>
    <style type="text/css">
    *{ margin:0;padding: 0;}
    div{position: absolute; width: 100px; height: 100px; background: red; left: 0;top: 100px;}
    </style>
    </head>
    <body>
    <button id="btn1"></button>
    <button id="btn2"></button>
    <div id="box"></div>
    
    <script type="text/javascript">
        window.onload = function(){
            var btn1 = document.getElementById('btn1');
            var btn2 = document.getElementById('btn2');
            var box = document.getElementById('box');
    
            btn1.onclick = function(){
                move(box,'top',12,600,function(){
                    move(box,'left',12,400)
                });
            }
    
            btn2.onclick = function(){
                move(box,'top',12,40,function(){
                    move(box,'left',12,0)
                });
            }
            /*
                obj:要运动的元素
                attr:属性
                dir:步长
                target:目标点
                endFn:回调函数
            */
            function move(obj,attr,dir,target,endFn){
                
                //根据元素当前位置和目标点的比较,动态设置步长为正数或负数
                dir = parseInt( getStyle(obj,attr) ) < target ? dir : -dir;
    
                // 1、清除定时器
                clearInterval(obj.timer);
                // 2、设置定时器
                obj.timer = setInterval(function(){
                    // 3、获取元素当前位置+步长
                    var speed = parseInt( getStyle(obj,attr) )  + dir;
                    // 4、如果元素当前位置超过目标点,则把当前位置==目标点
                    if( speed > target && dir > 0 || speed < target && dir < 0){
                        speed = target
                    }
                    // 5、设置元素位置
                    obj.style[attr] = speed + 'px';
                    // 6、判断是否到达目标点,如果到达则停止定时器
                    if(speed == target){
                        clearInterval(obj.timer);
                        // 回调函数,如果endFn存在则执行
                        endFn && endFn();
                    }
    
                },20)
            }
    
            /*
                获取非行间样式:
                标准浏览器下 getComputedStyle(obj)[attr]
                IE浏览器下   obj.currentStyle[attr]
            */
    
            function getStyle(obj,attr){
                return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr];
            }
            
        }
    </script>
    </body>
    </html>
      
  • 相关阅读:
    vue ERROR:in ./sc/styles/index.scss and 4058
    vue cli 报错4048 解决方法
    原型 与 原型链
    Node.js的简介与历史
    javascript实现表单提交加密
    javaScript的关键字与保留字
    luogu P4422 题解
    【笔记】博弈论
    5.11 考试解题报告
    【P4370】[Code+#4]组合数问题2
  • 原文地址:https://www.cnblogs.com/javascripter/p/9856042.html
Copyright © 2011-2022 走看看