js实现div色块拖动录制


Posted in Javascript onJanuary 16, 2020

本文实例为大家分享了js实现div色块拖动录制的具体代码,供大家参考,具体内容如下

描述:

实现一个div50*50的色块,拖动它生成一个轨迹,松手后,这个div会重复你刚才拖动的这个路径。

效果:

js实现div色块拖动录制

js实现div色块拖动录制

代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    div
    {
      width: 50px;
      height: 50px;
      background-color: deepskyblue;
      position: absolute;
      border: 2px solid #656565;
    }
  </style>
  <script src="js/Method.js"></script>
</head>
<body>
<div></div>
  <script>
    var elem;
    var state=0;//当前的状态 初始0——拖动录制1——回放2
    var arr=[];//存放我们的行走路径的 数组
    var list=[];//存放我们的行走路径的 数组
 
    var index=0;
    init();
    function init() {
      elem=document.querySelector("div");
      Method.dragElem(elem);
      elem.addEventListener("mousedown",mouseHandler);
      elem.addEventListener("mouseup",mouseHandler);
      setInterval(animation,16);
    }
 
    function mouseHandler(e) {//当前的状态 初始0——拖动录制1——回放2
      if(e.type==="mousedown"){//鼠标按下
        state=1;
      }else if(e.type==="mouseup"){//鼠标抬起
        createElemShadow();
        state=2;
      }
    }
 
    function createElemShadow() {
      var bool=false;
      if(list.length===0) bool=true;
      for(var i=0;i<5;i++){
        if(bool)list.push(elem.cloneNode(false));
        list[i].style.opacity=1-i*0.2;
        document.body.appendChild(list[i])
      }
    }
    
    function animation() {
      if(!state) return;
      if(state===1){
        record();
      }else if(state===2){
        play();
      }
    }
    
    function record() {
      var rect=elem.getBoundingClientRect();
      arr.push({x:rect.x,y:rect.y});
    }
    
    
    function play() {
     /* if(index>=arr.length-1){
        state=0;
        return;
      }*/
      index++;
      var point=arr[index];
      if(point){
        elem.style.left=point.x+"px";
        elem.style.top=point.y+"px";
        elem.style.backgroundColor=Method.divColor();
      }
      var bool=false;
      for(var i=0;i<list.length;i++){
        if(!arr[index-i*2]) continue;
        list[i].style.left=arr[index-i*2].x+"px";
        list[i].style.top=arr[index-i*2].y+"px";
        list[i].style.backgroundColor=Method.divColor();
        bool=true;
      }
      if(!bool){
        state=0;
        for(var j=0;j<list.length;j++){
          list[j].remove();
        }
      }
    }
  </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
Aug 04 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
Dec 02 Javascript
js注意img图片的onerror事件的分析
Jan 01 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
Dec 20 Javascript
JavaScript插件化开发教程 (一)
Jan 27 Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 Javascript
浅谈Javascript中Object与Function对象
Sep 26 Javascript
浅析创建javascript对象的方法
May 13 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
Oct 18 Javascript
bootstrap table合并行数据并居中对齐效果
Oct 17 Javascript
JS栈stack类的实现与使用方法示例
Jan 31 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
Jun 14 Javascript
微信小程序实现二维码签到考勤系统
Jan 16 #Javascript
解决vue+ element ui 表单验证有值但验证失败问题
Jan 16 #Javascript
JavaScript实现简单的计算器
Jan 16 #Javascript
js面向对象之实现淘宝放大镜
Jan 15 #Javascript
js实现简单的打印表格
Jan 15 #Javascript
js实现图片实时时钟
Jan 15 #Javascript
js实现中文实时时钟
Jan 15 #Javascript
You might like
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
短信提示使用 特效
2007/01/19 Javascript
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
Python多线程threading模块用法实例分析
2019/05/22 Python
python with (as)语句实例详解
2020/02/04 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
销售工作人员的自我评价分享
2013/11/10 职场文书
大一自我鉴定范文
2013/12/27 职场文书
英语求职信范文
2014/05/23 职场文书
服务口号大全
2014/06/11 职场文书
计划生育证明书写要求
2014/09/17 职场文书
县委务虚会发言材料
2014/10/20 职场文书
加强作风建设心得体会
2014/10/22 职场文书
房产电话营销开场白
2015/05/29 职场文书
世界文化遗产导游词
2019/08/07 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
一文带你探究MySQL中的NULL
2021/11/11 MySQL