ES6 用class方式实现鼠标拖拽

本文介绍如何使用ES6的class语法实现鼠标拖拽功能,并为div元素生成随机颜色背景。通过创建拖拽类,设置div样式,监听鼠标事件完成拖拽效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6 用class方式实现鼠标拖拽

鼠标拖拽div ,div随机颜色生成

    <script>
        //1.首先创建一个拖拽类
        class Drag {
            constructor() {//constructor 类的构造函数
            //这个了作用域里 this 代表着new操作符创建的空实例对象
                //2.新建一个dom节点                
                this.div = document.createElement('div')
                //3.给dom节点设置一些样式
                this.div.style.cssText = `
                     width:100px;
                     height:100px;
                     position:absolute;
                     background:green;
                     left:0;
                     top:0;
                     `
                //4.让dom节点上树
                document.body.appendChild(this.div)
                //调用随机颜色方法
                this.random()
                //5.调用开始方法,也就是监听鼠标按下            
                this.start()
            }
            start() {
                //开始方法
                //在此方法中监听鼠标按下
                //该方法需要在构造函数里调用,用来创建一个,就start方法
                //在start作用域里this代表着 new操作符创建的实例对象
                //6.监听鼠标按下事件
                this.div.onmousedown =  (evt)=> {
                    //因为let只在当前作用域中起作用。所以,我们这里用this. 也就是用属性的方法,保存值
                    //7.需要先找到鼠标在按下时的位置
                    this.downX=evt.clientX;
                    this.downY=evt.clientY;
                    //8.找到,div移动前的位置
                    this.downLeft=this.div.offsetLeft;
                    this.downTop=this.div.offsetTop;
                    //这个作用域里this 代表着 onmousedown前面的变量 也就是this.div 也就是div
                    //div 是没有move的方法的,所以我们这里用箭头函数来解决这个问题
                    //因为箭头函数是没有this的,如果出现,他会向上找。
                    //现在this 代表的就是new操作符创建的实例对象
                    //9.调用移动方法 也就是监听鼠标移动事件
                    this.move()
                    //10.调用停止方法  也就是监听鼠标停止事件
                    this.end()
                }
            }
            move() {
                //移动方法
                //在此方法中监听鼠标移动
                //在此作用域中,this 代表着 new操作符创建的实例对象
                 let that=this
                //11.监听鼠标移动               
                window.onmousemove=function(evt){
                     //这个作用域里this 代表着 onmousemove前面的变量 也就是window
                     //window 是没有new操作符创建的实例对象的属性的,这里我们可以换一种方式解决这个问题
                     //我们可以把上面作用域的this先存起来
                     //这样that 就是d1
                     //12.得到div移动的距离,就是现在的鼠标坐标减去移动前的鼠标坐标
                     let moveX=evt.clientX-that.downX;
                     let moveY=evt.clientY-that.downY;
                     //13.改变div的left 就是div在移动前的位置加上移动的距离
                     that.div.style.left=that.downLeft+moveX+'px';
                     that.div.style.top=that.downTop+moveY+'px';

                }
            }
            end() {
                //停止方法
                //在此方法中监听鼠标抬起
                //14.监听鼠标抬起
                window.onmouseup=function(){
                    //15.请鼠标移动,与鼠标抬起
                    window.onmousemove=null;
                    window.onmouseup=null;
                }
            }
            random(){
                //随机颜色方法
                //在此方法中随机颜色
                //在此作用域中,this代表着new操作符创建的实例对象
                //15.随机颜色
                //方法一
                // let r=Math.floor(Math.random()*256)
                // let g=Math.floor(Math.random()*256)
                // let b=Math.floor(Math.random()*256)
                //设置颜色
                // this.div.style.backgroundColor=`rgb(${r},${g},${b})`          
                //方法二
                let r=Math.floor(Math.random()*0xFFFFFF)//0xFFFFFF 代表16进制数
                //0xFFFFFF只是指定了随机数的范围,但是得到的随机数,依然是以10进制的数展现的
                r=r.toString(16)//转化成16进制数
                r=('000000'+r).slice(-6);//前面补0
                //设置颜色
                this.div.style.backgroundColor=`#${r}`

            }

        }
        //调用
        new Drag();
        //如果要多个div的话。在控制台,执行上面语句就可以了
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值