1. 程式人生 > >自己動手搞一個拖動滑塊,點選水波紋效果

自己動手搞一個拖動滑塊,點選水波紋效果

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 }; } }