zoukankan      html  css  js  c++  java
  • JavaScript课程——Day13(3、运动框架)

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            #box {
                width: 100px;
                height: 100px;
                background-color: red;
                position: absolute;
                left: 0;
                top: 0;
            }
        </style>
    </head>
    
    <body>
        <div id="box"></div>
    
        <script src="js/move.js"></script>
        <script>
            // 点击box,让它的宽和高同时到500
            var box = document.getElementById('box');
            box.onclick = function () {
                move(box, {
                     500,
                    height: 300,
                    opacity: 30,
                    left: 500,
                    top: 200
                }, function () {
                    console.log('我到了');
                })
            }
        </script>
    </body>
    
    </html>
    function getStyle(ele, attr) {
        if (window.getComputedStyle) {
            // 标准浏览器
            return getComputedStyle(ele)[attr];
        } else {
            // IE8及以下
            return ele.currentStyle[attr];
        }
    }
    
    // 元素 属性 目标 回调
    function move(ele, json, callback) {
        clearInterval(ele.timer); // 先清
        // 再开
        ele.timer = setInterval(function () {
            var onOff = true; // 建一个开关
    
            // 在for-in的里面,如果某一个属性没有到,则把开关变为假
            for (var attr in json) { // 删掉的attr和target又回来了
                var target = json[attr];
    
                // 当前位置
                if (attr === 'opacity') {
                    var now = getStyle(ele, 'opacity') * 100;
                } else {
                    var now = parseInt(getStyle(ele, attr));
                }
    
                var dir = (target - now) / 10; // 方向 缓冲运动
                // 如果大于0,向上取整,否则向下取整
                dir = dir > 0 ? Math.ceil(dir) : Math.floor(dir);
                now += dir; // 下次应该运动到的位置
    
                if ((now >= target && dir > 0) || (now <= target) && dir < 0) {
                    now = target;
                }
    
                // 设置值
                if (attr === 'opacity') {
                    ele.style.opacity = now / 100;
                    ele.style.filter = 'alpha(opacity=' + now + ')';
                } else {
                    ele.style[attr] = now + 'px';
                }
    
                if (now !== target) {
                    onOff = false;
                }
            }
    
            if (onOff) { // 如果开关是真的,则清定时器并执行回调
                clearInterval(ele.timer);
                callback && callback();
            }
        }, 30);
    }
  • 相关阅读:
    Linux Time_wait网络状态 调优
    Linux 系统开启随机端口数量 调优
    Linux 跟踪连接netfilter 调优
    Linux 文件时间记录属性 调优
    Linux 默认线程栈大小 调优
    Linux 系统开启最大线程数 调优
    Linux 系统级开启文件句柄 调优
    Linux 进程级开启最大文件描述符 调优
    参数优化-偏差与方差
    决策树-回归
  • 原文地址:https://www.cnblogs.com/miaochaofan/p/14742745.html
Copyright © 2011-2022 走看看