自己動手搞一個拖動滑塊,點選水波紋效果
阿新 • • 發佈:2019-02-19
window.onload = function() {
var lineDiv = document.getElementById('lineDiv'); //長線條
var minDiv = document.getElementById('minDiv'); //小方塊
var minVals = document.getElementById('vals'); //左長線
var msg = document.getElementById("msg"); //最上面的資訊
var ifBool = false; //判斷滑塊是否按下
var lineDiv_W = getPosition(lineDiv).width; //長線的長度
var lineDiv_L = getPosition(lineDiv).left; //長線距離html的left
var minDiv_W = getPosition(minDiv).width; //滑塊的長度
var minDiv_L = getPosition(minDiv).left; //滑塊距離html的left
var Slider_W_MAX = lineDiv_W - minDiv_W; //滑塊可以滑動的最大值px,範圍是0~Slider_W_MAX
var minNum = 0; //最小值
var maxNum = 500; //最大值
var startNum = 100; //起始值
var endNum = 400; //結束值
var min_Px = Slider_W_MAX / maxNum * startNum; //滑塊可以滑動的最小px
var max_Px = Slider_W_MAX / maxNum * endNum; //滑塊可以滑動的最大px
var minDiv_left=0; //當前滑塊的位置
/*
Slider_W_MAX 1元對應的px? 1
maxNum 1 1px對應的金額?
*/
function initSlider(initPX) { //設定滑塊的初始位置
console.log(initPX);
minDiv_left=initPX; //設定滑塊的位置
minDiv.style.left = initPX + "px";
minVals.style.width = initPX + "px";
msg.innerText = parseInt(initPX / Slider_W_MAX * 100);
}
(function() { //初始化滑塊位置
if(startNum >= 0) { //求出startNum對應的px
initSlider(Slider_W_MAX / maxNum * startNum)
}
})()
//事件
var start = function(e) {
ifBool = true;
//console.log("滑鼠按下")
}
var move = function(e) {
//console.log("滑鼠拖動")
if(ifBool) {
var x; //記錄滑塊距離html的距離left
if(!e.touches) { //相容PC端
x = e.clientX;
} else { //相容移動端
x = e.touches[0].pageX;
}
minDiv_left = x - lineDiv_L; //小方塊相對於父元素(長線條)的left值
if(minDiv_left >= Slider_W_MAX) {
minDiv_left = Slider_W_MAX;
}
if(minDiv_left < 0) {
minDiv_left = 0;
}
//設定拖動後小方塊的left值
initSlider(minDiv_left)
}
}
var end = function(e) {
if(minDiv_left>max_Px){
initSlider(max_Px);
}
if(minDiv_left<min_Px){
initSlider(min_Px);
}
ifBool = false;
}
//滑鼠按下方塊
minDiv.addEventListener("touchstart", start);
minDiv.addEventListener("mousedown", start);
//拖動
window.addEventListener("touchmove", move);
window.addEventListener("mousemove", move);
//滑鼠鬆開
window.addEventListener("touchend", end);
window.addEventListener("mouseup", end);
//獲取元素的絕對位置
function getPosition(node) {
var width = node.offsetWidth; //元素寬度
var height = node.offsetHeight; //元素高度
var left = node.offsetLeft; //獲取元素相對於其根元素的left值var left
var top = node.offsetTop; //獲取元素相對於其根元素的top值var top
current = node.offsetParent; // 取得元素的offsetParent
// 一直迴圈直到根元素
while(current != null) {
left += current.offsetLeft;
top += current.offsetTop;
current = current.offsetParent;
}
return {
"width": width,
"height": height,
"left": left,
"top": top
};
}
}