失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 原生js实现滑块拖动功能

原生js实现滑块拖动功能

时间:2023-07-29 17:15:14

相关推荐

原生js实现滑块拖动功能

<body>

<div class="box"></div>

</body>

<style>

body {

position: relative;

}

.box {

width: 100px;

height: 100px;

background-color: red;

position: absolute;

top: 0;

left: 0;

}

</style>

<script>

// 要求:

// 1. 实现一个可拖动的`<div>`元素

// 2. 当鼠标按下该元素时,元素可以跟随鼠标移动,

// 3. 当鼠标松开,元素不在跟随鼠标移动

// 获取div

var box = document.getElementsByClassName("box")[0];

// console.log(box);

// console.log(box.offsetWidth / 2, box.offsetHeight / 2);

//设置一个变量去判断鼠标是在box否按下

var flag = false;

//给box绑定鼠标按下事件

var delX = 0;

var delY = 0;

box.onmousedown = function () {

flag = true;

//获取需要删除的距离

/*

为什么说要删除呢?

因为我们在移动div的时候可以看作是div的右上角的那个点为基准进行移动

当鼠标点击时鼠标的位置不为零

若是以这个为数据对div进行移动,那么div的右上角是跟随鼠标的位置,

不减去的话鼠标就不能在视觉上在div中间,

减去后鼠标的位置就能在div的相对位置中,也就是说开始的时候鼠标在div中那个位置移动时就能保持在div中的位置

*/

delX = event.clientX - box.offsetLeft;

delY = event.clientY - box.offsetTop;

// console.log(delX, delY);

// console.log(event.clientX, event.clientY);

// console.log(box.offsetLeft, box.offsetTop);

};

//整个div绑定鼠标移动事件

// 这一步是为了方便获取鼠标相对与文档的位置数据

window.onmousemove = function () {

if (flag) {

//删除多余的距离 保持住按下的位置

// var x = event.clientX - delX;

// var y = event.clientY - delY;

//删除多余的距离 保持住鼠标在div中心

var x = event.clientX - box.offsetWidth / 2;

var y = event.clientY - box.offsetHeight / 2;

// console.log(event.clientX, event.clientY);

box.style.left = x + 'px';

box.style.top = y + 'px';

}

};

//给div绑定了 鼠标抬起事件

// 这样就不会继续记录鼠标移动

window.onmouseup = function () {

flag = false;

};

</script>

如果觉得《原生js实现滑块拖动功能》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。