样式<input type =“range”/>用于重定向不在触摸设备上工作

时间:2013-11-02 09:34:10

标签: javascript jquery html css html5

我正在尝试创建一个滑块,在达到特定值时,会重定向到另一个网址。代码是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

1 个答案:

答案 0 :(得分:2)

简单。你必须为此添加一些触摸事件。 onmouseup&amp; onmousestart将仅触发鼠标事件,并且从我所看到的,触摸屏上不起作用。您必须添加的事件是touchmove&amp; touchend也是如此。 Here's a reference link from MDN for touch events of 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/

希望这有帮助!