你相信时光倒流吗?利用javaScript实现不可能(本期知识:完美拖拽)

   日期:2020-09-20     浏览:102    评论:0    
核心提示:前言实现效果涉及知识点1.浏览器的滚动事件(onscroll)2.鼠标的按下事件(mousedown)3.鼠标的抬起事件(mouseup)4.鼠标的移动事件(mousemove)5.光标坐标点的获取、获取事件对象6.边缘检测7.定时器(setInterval)8.数组的方法(push)完整代码复制可用(内有注释说明)<!DOCTYPE html><html lang="en"> <head> <meta chars

前言

你相信时光倒流吗,
震惊!!!
代码界一小伙利用javaScript
把一个div的生长周期倒退重演

实现效果

涉及知识点

1.浏览器的滚动事件(onscroll)
2.鼠标的按下事件(mousedown)
3.鼠标的抬起事件(mouseup)
4.鼠标的移动事件(mousemove)
5.光标坐标点的获取、获取事件对象
6.边缘检测
7.定时器(setInterval)
8.数组的方法(push)

完整代码

复制可用(内有注释说明)
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style> body,html{  width: 100%; height: 100%; overflow: hidden; position: relative; } *{  margin: 0; padding: 0; } #box{  width: 300px; height: 200px; background: #000; position: absolute; left: 600px; top: 300px; } #tuo{  width: 300px; height: 50px; background: #ccc; } h1 a{  font-size: 10px; color: cornflowerblue; display: block; float: right; } </style>
    </head>
    <body>
        <div id="box">
            <h1 id="tuo"><a href="javascript:;" id="d">点击还原轨迹</a></h1>
        </div>
    </body>
    <script> //封装一个id获取函数 function $id(id){  return document.getElementById(id) } //封装一个获取滚动的距离{top:"",left:""} function getScroll(){  if(window.pageYOffset){  return {  top:window.pageYOffset, left:window.pageXOffset } }else if(document.documentElement.scrollLeft){  return {  top:document.documentElement.scrollTop, left:document.documentElement.scrollLeft } }else{  return {  top:document.body.scrollTop, left:document.body.scrollLeft } } } var box =$id("box");//获取拖拽体所容器 var tuo =$id("tuo");//获取拖拽触发容器 var d =$id("d");//获取a标签 var arr = [];//创建一个空数组,用来存储box的移动轨迹 // 1 给拖拽对象tuo创建鼠标按下事件 tuo.onmousedown = function(e){  e = e || window.event;//获取鼠标按下对象 //兼容写法,获取鼠标相对box的位置 var disx = e.offsetX || e.layerX; var disy = e.offsetY || e.layerY; //事件委托,把box的移动事件委托给body document.body.onmousemove = function(e){  //兼容写法,鼠标可视区域+滚动条的距离 var oLeft = (e.clientX + getScroll().left) - disx; var oTop= (e.clientY + getScroll().top) - disy; //边缘检测 if(oLeft<0){  oLeft = 0; } if(oLeft>window.innerWidth - box.offsetWidth){  oLeft = window.innerWidth - box.offsetWidth; } if(oTop<0){  oTop = 0; } if(oTop>window.innerHeight - box.offsetHeight){  oTop = window.innerHeight - box.offsetHeight; } //把最终的值赋给box box.style.left = oLeft + "px"; box.style.top = oTop + "px"; //每移动一次,就往空数组添加数据 arr.push({ "left":box.style.left , "top":box.style.top}) } //事件委托,当检测到鼠标抬起时,让移动事件失效 document.body.onmouseup = function(){  document.body.onmousemove = null; } } //定义一个全局定时器 var timer; //创建点击a标签事件 d.onclick = function(){  var i = arr.length - 1;//i为数组长度 clearInterval(timer)//使用定时器时先清空定时器(重点) timer = setInterval(function(){  //还原轨迹 box.style.left = arr[i].left; box.style.top = arr[i].top; i--;//数组长度-- //当i<0时停止定时器,并让数组清空 if(i<0){  clearInterval(timer) arr = []; } },1000/30)//每1000/30毫秒还原一次 } </script>
</html>

下期再见

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服