【前端】JS实现滑块拖动事件的思路
<div class="scale" id="bar1"><div id="scaleprogress1" name="scaleprogress" class="scaleprogress"></div>
<div id="btn1" class="btn">
<span id="title" class="msg" ng-bind="freezerTargetTemperature"></span>
</div>
</div>
我要给白色的小滑块 添加拖动事件 实现拖动温度增加减少 请问应该用touchstart touchmove touchend 实现么
拖动过程中 温度需要计算改变 还有就是样式需要改变
还是改写成 input = range的样式 添加事件来写好
p.s 不太熟悉touch事件
回答
touch事件和mouse事件大致一样的,给你个例子吧
<!DOCTYPE html><html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0, maximum-scale=1.0,user-scalable=no">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
}
.box{
position: relative;
width: 100px;
background-color: #000;
height: 4px;
margin: 100px;
}
.box span{
position: absolute;
height:10px;
width: 10px;
border-radius: 50%;
margin-top: -3px;
left:0;
background-color: red;
}
</style>
</head>
<body>
<div class="text">0</div>
<div class="box">
<span></span>
</div>
</body>
<script>
var obj = document.querySelector("span");
var text = document.querySelector(".text");
obj.addEventListener('touchstart', function(event) {
event.preventDefault();
// 如果这个元素的位置内只有一个手指的话
if (event.targetTouches.length == 1) {
var touch = event.targetTouches[0];
// 把元素放在手指所在的位置
var disX=touch.pageX-obj.offsetLeft;
var disY=touch.pageY-obj.offsetTop;
var box=document.querySelector(".box");
var width= box.clientWidth-obj.offsetWidth;
obj.addEventListener('touchmove',move);
function move(event){
var touch2=event.targetTouches[0];
var l=touch2.pageX-disX;
var t=touch2.pageY-disY;
if(l<0){
l=0;
};
if(l>width){
l=width;
};
if(t<0){
t=0;
};
if(t>0){
t=0;
};
obj.style.left=l+'px';
obj.style.top=t+'px';
text.innerHTML = (l/width).toFixed(1);
};
obj.addEventListener('touchend',chend);
function chend(event){
obj.removeEventListener('touchmove',move);
obj.removeEventListener('touchend',chend);
};
};
}, false);
</script>
</html>
以上是 【前端】JS实现滑块拖动事件的思路 的全部内容, 来源链接: utcz.com/a/81243.html