• day16


    1- 什么是事件委托,原理是什么?

    原理: 利用冒泡的原理,把事件加到父级上,触发执行效果。

    2- js 中有几种定时器,有什么区别?

    setTimeout() 和 setInterval()

    setTimeout:一次性定时器,只在指定时间后执行一次;

    setInterval以指定时间为周期循环执行

    3- 如何清除定时器?

    clearInterval()
    clearTimeout()

    4-封装一个动画函数

    封装变速函数:

    复制代码
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    
        div {
            margin-top: 20px;
             200px;
            height: 200px;
            background-color: blue;
            position: absolute;
            left: 0;
            top: 0;
        }
    </style>
    
    <body>
        <input type="button" value="移动" id="btn">
        <div id="dv"></div>
    
        <script src="js/common.js"></script>
        <script>
    
            function getStyle(element, attr) {
                // 判断浏览器是否指该属性
                return window.getComputedStyle ? window.getComputedStyle(element, null)[attr] : element.currentStyle[attr]
            }
    
            // 点击按钮,可以改变宽高,位置,透明度,层级关系
            function animate(element, json, fn) {
                //清理定时器
                clearInterval(element.timerId)
                // 创建定时器
                element.timerId = setInterval(function () {
                    // 创建标志位,确定定时器是否要清除
                    var flag = true;
                    for (var attr in json) {
                        if (attr == "opacity") {  //透明度
                            // 获取元素透明度
                            var current = parseInt(getStyle(element, attr) * 100);
                            console.log(current)
                            // 计算变化步数
                            var target = json[attr] * 100;
                            var step = (target - current) / 10;
                            step = step > 0 ? Math.ceil(step) : Math.floor(step)
                            current += step;
                            element.style[attr] = current / 100;
                        }
                        else if (attr == "z-Index") {  //z-index属性
                            // 层级关系改变就是直接改属性值
                            element.style[attr] = json[attr]
                        }
                        else { // 普通属性
                            // 获取元素当前属性值
                            var current = parseInt(getStyle(element, attr))
                            // 移动步数(获取当前属性的目标值)
                            var target = json[attr];
                            // 确定移动步数,计算步长,达到缓动效果
                            var step = (target - current) / 10;
                            // 判断 取整
                            step = step > 0 ? Math.ceil(step) : Math.floor(step) //Math.ceil向上取整,Math.floor向下取整
                            current += step
                            element.style[attr] = current + "px";
                        }
                        // 判断目标是否到达位置
                        if (current != target) {
                            flag = false
                        }
                    }
                    if (flag) {
                        clearInterval(element.timerId)
                        if (fn) {
                            fn()
                        }
                    }
                }, 20)
            }
    
    
            // 方法调用
    
            getId("btn").onclick = function () {
                var json1 = { "width": 800, "height": 400, "left": 500, "top": 600, "opacity": 0.1 }
                animate(getId("dv"), json1, function () {
                    var json2 = { "width": 100, "height": 100, "left": 50, "top": 50, "opacity": 1, "z-Index": 1000 }
                    animate(getId("dv"), json2)
                })
            }
    
            /* getId("btn").onclick = function () {
                var json1 = { "width": 800, "height": 400, "left": 500, "top": 600, "opacity": 0.1 }
                animate(getId("dv"), json1, function () {
                    var json2 = { "width": 100, "height": 100, "left": 50, "top": 50, "opacity": 1, "z-Index": 1000 }
                    animate(getId("dv"), json2)
                })
            } */
        </script>
    </body>
    
    </html>
  • 相关阅读:
    【iOS开发每日小笔记(十二)】仿Facebook登录界面 错误提示抖动 利用CAAnimation设置动画效果
    《跑酷好基友》(英文名:BothLive)隐私政策声明
    【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber
    【iOS开发每日小笔记(十)】自制带圆框的头像 利用在CALayer设置“寄宿图”
    【iOS开发每日小笔记(九)】在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法
    2018/3/29
    2018/3/26
    2018/3/25
    BZOJ[3091] 城市旅行
    2018/3/23
  • 原文地址:https://www.cnblogs.com/Natural-numbers/p/14497242.html
Copyright © 2020-2023  润新知