其实很简单点击记录状态,放手状态重置,先上代码在说下遇到的问题javascript
<div id='div1' class='move left'></div>
<div id='div2' class='move right'></div>
复制代码
body{
width: 100%;
}
.move {
width: 100px;
height: 100px;
border: 1px solid red;
box-sizing: boder-box;
position: absolute
}
.left: {
left: 0
}
.right: {
right: 0
}
复制代码
class Movediv{
constructor(el) {
this.div = document.querySelector(el);
this.init()
}
init() {
this.div.onmousedown = function(e){
this.x = e.clientX - this.div.offsetLeft
this.y = e.clientY - this.div.offsetTop
document.onmousemove = this.fnmove.bind(this)
document.onmouseup = this.fnup.bind(this)
}.bind(this)
}
fnmove(e) {
this.div.style.left = (e.clientX - this.x) + 'px'
this.div.style.top = (e.clientY - this.y) + 'px'
}
fnup(e) {
document.onmousemove = null
document.onmouseup = null
}
}
复制代码
上面的js就是类实现能够拖拽的DIV,提一个新需求,拖拽的div左右不能超过左右范围css
这就用到类继承的概念了html
class Movediv1 extends Movediv {
<!--这个样子基本就是继承movediv里面全部的方法-->
<!--可是咱们同时须要改写fnmove方法--> fnmove(e) { <!--保留父的--> super.fnmove(e) this.maxWidth = document.body.clientWidth; if(parsenInt(this.div.style.left) <= 0) { this.div.style.left = 0 } else if(parseInt(this.div.style.left) >= (parseInt(this.maxWidth - 100))){ this.div.style.left = (this.maxWidth - 100) + 'px' } } } 复制代码
提几个比较容易犯错误的地方前端
看到的某年腾讯的前端面试题,顺便实现了下,内容虽小里面用的东西仍是蛮多的,关于类,继承等方法,好好学习java