拖動滑塊效果:
先看看效果圖:
<!doctype html><html> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title>Document</title> <script type="text/javascript" src=""></script> <style type="text/css"> input[type="range"] { width: 80%; background-color: red; border-radius: 15px; -webkit-appearance: none; height: 1px; position: relative; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; background-color: green; border-radius: 50%; height: 30px; width: 30px; box-shadow: 0 1px 3px rgba(0, 0, 0, .4); border: none; position: relative; z-index: 10; } </style> <script type="text/javascript"> $(function() { $(".input_1").change(function() { $("p.p1").text($(this).val()); }) setInterval(function() { $("p.p2").text($(".input_2").val()); }, 0.01) }) </script> </head> <body> <p>添加change事件</p> <input type="range" step="0.01" min="0" max="5" value="0"> <p>0</p> <p>添加定時器</p> <input type="range" step="0.01" min="0" max="5" value="0"> <p>0</p> </body> </html>
<!DOCTYPE html><html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /><title>鼠標拖動小方塊</title><style type="text/css">.lineDiv {position: relative;height: 5px;background: red;width: 300px;margin: 50px auto;} .lineDiv .minDiv {position: absolute;top: -5px;left: 0;width: 15px;height: 15px;background: green;cursor: pointer} .lineDiv .minDiv .vals {position: absolute;font-size: 20px;top: -45px;left: -10px;width: 35px;height: 35px;line-height: 35px;text-align: center;background: blue;} .lineDiv .minDiv .vals:after {content: "";width: 0px;height: 0px;border-top: 6px solid blue;border-left: 6px solid transparent;border-right: 6px solid transparent;border-bottom: 6px solid transparent;display: block;margin-left: 11px;}</style></head> <body><center><h3>用鼠標拖動小方塊<span id="msg">0</span>%</h3></center><div id="lineDiv"><div id="minDiv"><div id="vals">0</div></div></div><script>window.onload = function() { var lineDiv = document.getElementById('lineDiv'); //長線條var minDiv = document.getElementById('minDiv'); //小方塊var msg = document.getElementById("msg");var vals = document.getElementById("vals");var ifBool = false; //判斷鼠標是否按下 //鼠標按下方塊minDiv.addEventListener("touchstart", function(e) {e.stopPropagation();ifBool = true;console.log("鼠標按下")}); //拖動window.addEventListener("touchmove", function(e) {console.log("鼠標拖動")if(ifBool) {var x = e.touches[0].pageX || e.touches[0].clientX; //鼠標橫坐標var xvar lineDiv_left = getPosition(lineDiv).left; //長線條的橫坐標var minDiv_left = x - lineDiv_left; //小方塊相對于父元素(長線條)的left值 if(minDiv_left >= lineDiv.offsetWidth - 15) {minDiv_left = lineDiv.offsetWidth - 15;}if(minDiv_left < 0) {minDiv_left = 0;}//設置拖動后小方塊的left值minDiv.style.left = minDiv_left + "px";msg.innerText = parseInt((minDiv_left / (lineDiv.offsetWidth - 15)) * 100);vals.innerText = parseInt((minDiv_left / (lineDiv.offsetWidth - 15)) * 100);}});//鼠標松開window.addEventListener("touchend", function(e) {console.log("鼠標彈起")ifBool = false;});//獲取元素的絕對位置function getPosition(node) {var left = node.offsetLeft; //獲取元素相對于其父元素的left值var leftvar top = node.offsetTop;current = node.offsetParent; // 取得元素的offsetParent // 一直循環直到根元素 while(current != null) { left += current.offsetLeft; top += current.offsetTop; current = current.offsetParent; }return {"left": left,"top": top};}}</script></body> </html>
兼容PC端和移動端
<!DOCTYPE html><html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /><title>鼠標拖動小方塊</title><style type="text/css">.lineDiv {position: relative;height: 5px;background: red;width: 300px;margin: 50px auto;} .lineDiv .minDiv {position: absolute;top: -5px;left: 0;width: 15px;height: 15px;background: green;cursor: pointer} .lineDiv .minDiv .vals {position: absolute;font-size: 20px;top: -45px;left: -10px;width: 35px;height: 35px;line-height: 35px;text-align: center;background: blue;} .lineDiv .minDiv .vals:after {content: "";width: 0px;height: 0px;border-top: 6px solid blue;border-left: 6px solid transparent;border-right: 6px solid transparent;border-bottom: 6px solid transparent;display: block;margin-left: 11px;}</style></head> <body><center><h3>用鼠標拖動小方塊<span id="msg">0</span>%</h3></center><div id="lineDiv"><div id="minDiv"><div id="vals">0</div></div></div><script>window.onload = function() { var lineDiv = document.getElementById('lineDiv'); //長線條var minDiv = document.getElementById('minDiv'); //小方塊var msg = document.getElementById("msg");var vals = document.getElementById("vals");var ifBool = false; //判斷鼠標是否按下//事件var start = function(e) {e.stopPropagation();ifBool = true;console.log("鼠標按下")}var move = function(e) {console.log("鼠標拖動")if(ifBool) {if(!e.touches) { //兼容移動端var x = e.clientX;} else { //兼容PC端var x = e.touches[0].pageX;}//var x = e.touches[0].pageX || e.clientX; //鼠標橫坐標var xvar lineDiv_left = getPosition(lineDiv).left; //長線條的橫坐標var minDiv_left = x - lineDiv_left; //小方塊相對于父元素(長線條)的left值 if(minDiv_left >= lineDiv.offsetWidth - 15) {minDiv_left = lineDiv.offsetWidth - 15;}if(minDiv_left < 0) {minDiv_left = 0;}//設置拖動后小方塊的left值minDiv.style.left = minDiv_left + "px";msg.innerText = parseInt((minDiv_left / (lineDiv.offsetWidth - 15)) * 100);vals.innerText = parseInt((minDiv_left / (lineDiv.offsetWidth - 15)) * 100);}}var end = function(e) {console.log("鼠標彈起")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 left = node.offsetLeft; //獲取元素相對于其父元素的left值var leftvar top = node.offsetTop;current = node.offsetParent; // 取得元素的offsetParent // 一直循環直到根元素 while(current != null) { left += current.offsetLeft; top += current.offsetTop; current = current.offsetParent; }return {"left": left,"top": top};}}</script></body> </html>
設置滑塊的滑動范圍
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /><title>鼠標拖動小方塊</title><style type="text/css">.lineDiv {position: relative;height: 5px;background: red;width: 95%;margin: 50px auto;} .lineDiv .minDiv {position: absolute;top: -15px;left: 0;width: 35px;height: 35px;background: green;cursor: pointer;transition: all 0s;} .lineDiv .vals {z-index: 100;position: absolute;top: 0px;left: 0px;width: 0px;height: 5px;background: blue;}</style></head> <body><center><h3>用鼠標拖動小方塊<span id="msg">0</span>%</h3></center><div id="lineDiv"><div id="vals"></div><!-- --><div id="minDiv"></div><!-- --></div><script>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; //滑塊可以滑動的最小pxvar 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對應的pxinitSlider(Slider_W_MAX / maxNum * startNum)}})() //事件var start = function(e) {ifBool = true;//console.log("鼠標按下")}var move = function(e) {//console.log("鼠標拖動")if(ifBool) {var x; //記錄滑塊距離html的距離leftif(!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 leftvar top = node.offsetTop; //獲取元素相對于其根元素的top值var topcurrent = node.offsetParent; // 取得元素的offsetParent // 一直循環直到根元素 while(current != null) { left += current.offsetLeft; top += current.offsetTop; current = current.offsetParent; }return {"width": width,"height": height,"left": left,"top": top};}}</script></body> </html>
點擊水波紋效果:
<!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JS</title> <link rel="stylesheet" type="text/css" href="css/reset.css" rel="external nofollow" /> <script type="text/javascript" src=""></script> <style type="text/css" media="screen"> ul { font-size: 0; position: relative; padding: 0; width: 480px; margin: 40px auto; user-select: none; } li { display: inline-block; width: 160px; height: 60px; background: #E95546; font-size: 16px; text-align: center; line-height: 60px; color: white; text-transform: uppercase; position: relative; overflow: hidden; cursor: pointer; } .slider { display: block; position: absolute; bottom: 0; left: 0; height: 4px; background: #1685D3; transition: all 0.5s; } .ripple { width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.4); -webkit-transform: scale(0); -ms-transform: scale(0); transform: scale(0); position: absolute; opacity: 1; } .rippleEffect { -webkit-animation: rippleDrop .4s linear; animation: rippleDrop .4s linear; } @-webkit-keyframes rippleDrop { 100% { -webkit-transform: scale(2); transform: scale(2); opacity: 0; } } @keyframes rippleDrop { 100% { -webkit-transform: scale(2); transform: scale(2); opacity: 0; } } </style> </head> <body> <ul> <li>項目一</li> <li>項目二</li> <li>項目三</li> <li class="slider"></li> </ul> </body> <script> $("ul li").click(function(e) { if($(this).hasClass('slider')) { return; } var whatTab = $(this).index(); var howFar = 160 * whatTab; $(".slider").css({ left: howFar + "px" }); $(".ripple").remove(); var posX = $(this).offset().left, posY = $(this).offset().top, buttonWidth = $(this).width(), buttonHeight = $(this).height(); console.log(posX, posY, buttonWidth, buttonHeight) $(this).append("<span class='ripple'></span>"); if(buttonWidth >= buttonHeight) { buttonHeight = buttonWidth; } else { buttonWidth = buttonHeight; } var x = e.pageX - posX - buttonWidth / 2; var y = e.pageY - posY - buttonHeight / 2; $(".ripple").css({ width: buttonWidth, height: buttonHeight, top: y + 'px', left: x + 'px' }).addClass("rippleEffect"); }); </script> </html>
新聞熱點
疑難解答