zoukankan      html  css  js  c++  java
  • 16

    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>
  • 相关阅读:
    MUTC2013 E-Deque-hdu 4604
    MUTC7 C
    MUTC7 A-As long as Binbin loves Sangsang
    MUTC2013 J-I-number-hdu4608
    MUTC2013 H-Park Visit-hdu4607
    判断点是否在多边形内 扫描法
    蓝桥杯 基础练习 十六进制转八进制
    判断点是否在三角形内
    判断点在线段上
    向量的叉乘
  • 原文地址:https://www.cnblogs.com/xuexiaotian/p/14494527.html
Copyright © 2011-2022 走看看