样式<输入类型=“范围”>用于重定向,在触摸设备上不起作用

Styled <input type="range"> made to redirect not working on touch devices

本文关键字:重定向 触摸 不起作用 用于 类型 输入 样式 范围      更新时间:2023-09-26

我正在尝试制作一个滑块,该滑块在达到特定值时会重定向到另一个URL。代码 http://jsfiddle.net/9vs2n/
.HTML:-

<div id="slide-wrap">
<div id="over">
    <div id="overin"></div>
</div>
<input type="range" id="in" class="slideToUnlock" value="0" max="100">
</div>


.CSS:-

body {
color:white;
background: #323232;
margin:0;
padding:0;
}
#over {
width:80%;
border:solid thick rgba(255, 255, 255, 0.5);
margin:0 auto;
padding:0;
height:55px;
display:block;
position:relative;
background:rgba(255, 255, 255, 0.75);
border-bottom-left-radius:1em;
border-top-right-radius:1em;
}
#overin {
appearance:none;
-webkit-appearance:none;
-moz-appearance:none;
background:#60a917;
width:75px;
height:55px;
display:block;
border-bottom-left-radius:1em;
border-top-right-radius:1em;
}
#in {
outline:none;
-moz-appearance:none;
-webkit-appearance:none;
appearance:none;
width:80%;
margin:0 auto;
margin-top:-55px;
padding:0;
height:55px;
display:block;
position:relative;
background:rgba(0, 0, 0, 0);
}
#overin:before {
color: white;
position:relative;
right:10px;
top: -10px;
width:99%;
font-size: 56px;
font-weight: bold;
content:">";
display:inline-block;
text-align:end;
}
#in::-webkit-slider-thumb {
cursor:pointer;
appearance:none;
-webkit-appearance:none;
-moz-appearance:none;
background:rgba(0, 0, 0, 0);
width:75px;
height:55px;
display:block;
}
#over:before {
content:"slide to continue";
color: white;
position: absolute;
left: 100px;
top: 10px;
z-index: -1;
font-size: 32px;
}
#slide-wrap {
margin:10px auto;
}


JavaScript:-

document.getElementById('in').onmouseup = function () {
var val = document.getElementById('in').value;
if (val >= 50) {
    window.location.href = "http://www.example.com/";
} else {
    this.value = 0;
    zero()
}
}
document.getElementById('in').onmousemove = function () {
enlarge();
}
function enlarge() {
if (document.getElementById('in').value > 10) {
    document.getElementById('overin').style.width = document.getElementById('in').value + "%";
}
}
function zero() {
document.getElementById('overin').style.width = '80px';
}
setInterval(loop1(), 1);
function loop1() {
document.getElementById('over').style.width = document.getElementById('in').style.width;
}

工作正常,但问题是它不适用于触摸设备,我已经在 iPad 上尝试过,请尝试解决此问题。该页面可在 https://dl.dropboxusercontent.com/u/99185097/donotdelete/index.html

很简单。您必须为此添加一些触摸事件。 onmouseup&onmousestart只会触发鼠标事件,据我所知,它不适用于触摸屏。您必须添加的事件也是touchmovetouchend。这是来自 MDN 的 HTML5 触摸事件的参考链接。

这是

您的代码需要结构化的方式:

var el = document.getElementById('in');
//mouse events
//gave names to the functions bound this, since w'll be using them two times. 
el.onmousemove = enlarge;
el.onmouseup = redirect;

//touch events 
//check if device has touch screen 
// CREDIT : http://stackoverflow.com/a/4819886/1217785
if (is_touch_device()) {
    console.log(true);
    //onmousemove = touchmove
    el.addEventListener("touchmove", enlarge, false)
    //onmouseup = touchend
    el.addEventListener("touchend", redirect, false)
}
//this function checks whether the device is a touch screen or not, else no binding will be done.
function is_touch_device() {
    var isTouch = 'ontouchstart' in window ||
        'onmsgesturechange' in window;
    
    console.log(isTouch);
    return isTouch;
};
//the rest of your functions
function redirect() {
    var val = document.getElementById('in').value;
    if (val >= 50) {
        window.location.href = "http://www.example.com/";
    } else {
        this.value = 0;
        zero()
    }
}

function enlarge() {
    if (document.getElementById('in').value > 10) {
        document.getElementById('overin').style.width = document.getElementById('in').value + "%";
    }
}
//other code

这是更新的演示:http://jsfiddle.net/hungerpain/9vs2n/6/

希望这有帮助!