16
1-什么是事件委托,原理是什么?
定义:利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件
原理:事件委托利用事件冒泡(从最深的节点开始,然后逐步向上传播事件)只在他们的父元素上指定一个事件处理程序,就可以管理某一类型的的所有事件。
2-js 中有几种定时器,有什么区别?
两种
setInterval(函数,时间)
setTimeout(函数,时间)
区别:前者为循环定时器,后者只执行一次
3-如何清除定时器?
celerInterval()
clearTimeOut()
4-封装一个动画函数
封装变速函数:
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 </head> 9 <style> 10 * { 11 margin: 0; 12 padding: 0; 13 } 14 15 div { 16 margin-top: 20px; 17 width: 200px; 18 height: 200px; 19 background-color: blue; 20 position: absolute; 21 left: 0; 22 top: 0; 23 } 24 </style> 25 26 <body> 27 <input type="button" value="移动" id="btn"> 28 <div id="dv"></div> 29 30 <script src="js/common.js"></script> 31 <script> 32 33 function getStyle(element, attr) { 34 // 判断浏览器是否指该属性 35 return window.getComputedStyle ? window.getComputedStyle(element, null)[attr] : element.currentStyle[attr] 36 } 37 38 // 点击按钮,可以改变宽高,位置,透明度,层级关系 39 function animate(element, json, fn) { 40 //清理定时器 41 clearInterval(element.timerId) 42 // 创建定时器 43 element.timerId = setInterval(function () { 44 // 创建标志位,确定定时器是否要清除 45 var flag = true; 46 for (var attr in json) { 47 if (attr == "opacity") { //透明度 48 // 获取元素透明度 49 var current = parseInt(getStyle(element, attr) * 100); 50 console.log(current) 51 // 计算变化步数 52 var target = json[attr] * 100; 53 var step = (target - current) / 10; 54 step = step > 0 ? Math.ceil(step) : Math.floor(step) 55 current += step; 56 element.style[attr] = current / 100; 57 } 58 else if (attr == "z-Index") { //z-index属性 59 // 层级关系改变就是直接改属性值 60 element.style[attr] = json[attr] 61 } 62 else { // 普通属性 63 // 获取元素当前属性值 64 var current = parseInt(getStyle(element, attr)) 65 // 移动步数(获取当前属性的目标值) 66 var target = json[attr]; 67 // 确定移动步数,计算步长,达到缓动效果 68 var step = (target - current) / 10; 69 // 判断 取整 70 step = step > 0 ? Math.ceil(step) : Math.floor(step) //Math.ceil向上取整,Math.floor向下取整 71 current += step 72 element.style[attr] = current + "px"; 73 } 74 // 判断目标是否到达位置 75 if (current != target) { 76 flag = false 77 } 78 } 79 if (flag) { 80 clearInterval(element.timerId) 81 if (fn) { 82 fn() 83 } 84 } 85 }, 20) 86 } 87 88 89 // 方法调用 90 91 getId("btn").onclick = function () { 92 var json1 = { "width": 800, "height": 400, "left": 500, "top": 600, "opacity": 0.1 } 93 animate(getId("dv"), json1, function () { 94 var json2 = { "width": 100, "height": 100, "left": 50, "top": 50, "opacity": 1, "z-Index": 1000 } 95 animate(getId("dv"), json2) 96 }) 97 } 98 99 /* getId("btn").onclick = function () { 100 var json1 = { "width": 800, "height": 400, "left": 500, "top": 600, "opacity": 0.1 } 101 animate(getId("dv"), json1, function () { 102 var json2 = { "width": 100, "height": 100, "left": 50, "top": 50, "opacity": 1, "z-Index": 1000 } 103 animate(getId("dv"), json2) 104 }) 105 } */ 106 </script> 107 </body> 108 109 </html>
浙公网安备 33010602011771号