02animate.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>
        * {
            padding: 0;
            margin: 0
        }

        .box {
            width: 100px;
            height: 100px;
            background-color: pink;
            position: relative;
            left: 1000px;
        }

        .box2 {
            background-color: blue;
        }
    </style>
</head>

<body>
    <button id="btn">运动到400</button>
    <button id="btn2">运动到800</button>
    <div class="box"></div>
    <div class="box box2" id="box2"></div>
    <script src="sport.js"></script>
    <script>
        var btn = document.querySelector("#btn");
        var btn2 = document.querySelector("#btn2");
        var box = document.querySelector(".box");
        var box2 = document.querySelector("#box2");
        btn.onclick = function () {
           //animate(box,400);
           //animate(box2,400);
           move(box,400,"left");
           move(box2,400,"left");
        }
        btn2.onclick = function () {
           animate(box,800);
           animate(box2,800);
        }
        var timeId = null;
        function animate(ele, target) {
            if(ele.timeId) {
                clearInterval(ele.timeId);
                ele.timeId = null;
            }
            var step = 9; // 步长
            ele.timeId = setInterval(() => {
                /*
                if (ele.offsetLeft >= target) {
                    ele.style.left = target + "px";
                    return clearInterval(ele.timeId);
                }
                */
                // 假如物体元一开始在终点右侧 应该往左移动 
                if(ele.offsetLeft > target) {
                    step = -Math.abs(step);
                } 
               
                if(Math.abs(ele.offsetLeft - target) < Math.abs(step)) {
                    ele.style.left = target + "px";
                    return clearInterval(ele.timeId);
                }
                ele.style.left = ele.offsetLeft + step + "px";
            }, 30);
        }

    </script>
</body>

</html>

鼠标放在按钮上透明度慢慢变化

03animate.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>
        * {
            padding: 0;
            margin: 0
        }

        .box {
            width: 100px;
            height: 100px;
            background-color: pink;
            position: relative;
            left: 1000px;
            opacity: .3;
        }

    </style>
</head>

<body>
    <div class="box"></div>
    <script src="sport.js"></script>
    <script>
        var box = document.querySelector(".box");
        // 放入div 透明度变为1   
        box.onmouseover = function() {
            //startMove(100);
            move(this,100,"opacity");
        }

        box.onmouseout = function() {
            //startMove(30);
            move(this,30,"opacity");
        }
        
        var num = 30;
        var timeId = null;
        function startMove(target) {
            clearInterval(timeId);
            timeId = setInterval(()=>{
                var speed = target - num > 0? 1: -1;
                if(num === target) {
                    clearInterval(timeId);
                } else {
                    num += speed;
                    box.style.opacity = num/100;
                    console.log(num);
                }
            },30);
        }
        
    </script>
</body>

</html>

04computedStyle.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>
        .box1 {
            width: 120px;
            height: 120px;
            background-color: red;
            padding: 5px;
            border: 2px solid orange;
            opacity: .4;
        }
    </style>
</head>
<body>
     <div class="box1" style="width: 160px;" id="box1"></div>
     <script>
         var box1 = document.querySelector("#box1");
         // console.log(box1.style.width); 只能行内样式
         //console.log(box1.offsetWidth);
         var attr = "height"
         console.log(getComputedStyle(box1).width);
         console.log(getComputedStyle(box1)['width']);

         function getStyle(obj,attr) {
             if (window.getComputedStyle) {
                 return getComputedStyle(obj,false)[attr];
             } else {
                 return obj.currentStyle[attr];
             }
         }

         //alert(getStyle(box1,"border"));
         alert(typeof getStyle(box1,"opacity"));
     </script>
</body>
</html>

运动函数支持多物体运动

sport.js

// obj 运动的元素
// target 目标值
// attr 操作的属性
function move(obj, target, attr) {
    clearInterval(obj.timer);
    var speed = 0;
    if (attr === "opacity") {
        current = parseFloat(getStyle(obj, attr)) * 100; // "1"*100
        speed = target - current > 0 ? 1 : -1;
    } else {
        current = parseInt(getStyle(obj, attr));
        speed = target - current > 0 ? 10 : -10;
    }
    obj.timer = setInterval(() => {
        if (attr === "opacity") {
            current = parseFloat(getStyle(obj, attr)) * 100; // "1"*100
            obj.style[attr] = (current + speed) / 100;
        } else {
            current = parseInt(getStyle(obj, attr));
            obj.style[attr] = (current + speed) + "px";
        }
        if (Math.abs(target - current) < Math.abs(speed)) {
            if (attr === "opacity") {
                obj.style[attr] = target / 100;
            } else {
                obj.style[attr] = target + "px";
            }
            return clearInterval(obj.timer);
        }
    }, 30);
}

// 300px  200px  
//100+10+10+10


function getStyle(obj, attr) {
    if (window.getComputedStyle) {
        return getComputedStyle(obj, false)[attr];
    } else {
        return obj.currentStyle[attr];
    }
}

sport2.js

// obj 运动的元素
// target 目标值
// attr 操作的属性
function move(obj, target, attr,callback) {
    clearInterval(obj.timer);
    var speed = 0;
    if (attr === "opacity") {
        current = parseFloat(getStyle(obj, attr)) * 100; // "1"*100
        speed = target - current > 0 ? 1 : -1;
    } else {
        current = parseInt(getStyle(obj, attr));
        speed = target - current > 0 ? 10 : -10;
    }
    obj.timer = setInterval(() => {
        if (attr === "opacity") {
            current = parseFloat(getStyle(obj, attr)) * 100; // "1"*100
            obj.style[attr] = (current + speed) / 100;
        } else {
            current = parseInt(getStyle(obj, attr));
            obj.style[attr] = (current + speed) + "px";
        }
        if (Math.abs(target - current) < Math.abs(speed)) {
            if (attr === "opacity") {
                obj.style[attr] = target / 100;
            } else {
                obj.style[attr] = target + "px";
            }
            clearInterval(obj.timer);
            if(callback) {
                callback();
            }
        }
    }, 30);
}

// 300px  200px  
//100+10+10+10


function getStyle(obj, attr) {
    if (window.getComputedStyle) {
        return getComputedStyle(obj, false)[attr];
    } else {
        return obj.currentStyle[attr];
    }
}

 

 

 

 

 

 

 

 

posted on 2019-07-12 23:07  HiJackykun  阅读(135)  评论(0编辑  收藏  举报