zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    mac os programming
    Rejecting Good Engineers?
    Do Undergrads in MIT Struggle to Obtain Good Grades?
    Go to industry?
    LaTex Tricks
    Convert jupyter notebooks to python files
    How to get gradients with respect to the inputs in pytorch
    Uninstall cuda 9.1 and install cuda 8.0
    How to edit codes on the server which runs jupyter notebook using your pc's bwroser
    Leetcode No.94 Binary Tree Inorder Traversal二叉树中序遍历(c++实现)
  • 原文地址:https://www.cnblogs.com/Natural-numbers/p/14497242.html
Copyright © 2011-2022 走看看