터치 장치의 jQuery UI 슬라이더


96

jQuery UI를 사용하여 웹 사이트를 개발 중이며 터치 스크린 장치에서 볼 때 호환되지 않는 것처럼 보이는 여러 요소가 내 사이트에 있습니다. 오류가 발생하지는 않지만 동작은 옳지 않습니다.

문제의 요소는 jQuery UI에서 정의한 슬라이더 및 범위 슬라이더입니다. 터치 스크린에서 핸들을 잡는 것으로 터치를 등록하고 슬라이더를 가로 질러 핸들을 드래그 할 때 드래그하는 대신 전체 웹 페이지를 화면 측면으로 슬라이드합니다. 핸들을 탭한 다음 핸들을 끝낼 슬라이더의 위치를 ​​탭하면 작동하지만 이것은 매우 느리고 이상적이지 않습니다. 어떤 아이디어?

jqtouch 플러그인을 다운로드 한 다음 .touch([...])slider () 및 rangeslider ()에 대한 모든 호출에 연결하려고 시도했지만 작동하지 않았습니다.

감사!

업데이트 : jQuery UI 웹 사이트에서이 "패치"를 찾았습니다.

http://bugs.jqueryui.com/ticket/4143

그것은 그것이 iPhone에서 슬라이더를 용이하게한다고 말하지만, 이제 또 다른 어리석은 질문에 대해 :이 "패치"를 내 코드에 어떻게 통합합니까? 플러그인처럼 코드 시작 부분에 포함시켜야합니까?

답변:


141

이 라이브러리는 귀하가 찾고있는 것을 제공하는 것 같습니다.

https://github.com/furf/jquery-ui-touch-punch#readme

또한 몇 가지 예제 사용 코드가 있습니다 (단순히 플러그인 추가).

<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.17/jquery-ui.min.js"></script>
<script src="jquery.ui.touch-punch.min.js"></script>
<script>
  $('#widget').draggable();
</script>

28
질량에 유의하십시오. 전체가 아닌 슬라이더 핸들에 부착하십시오. (jQuery 슬라이더의 경우$('.ui-slider-handle').draggable();
PaulSkinner

17
이제 슬라이더 핸들을 페이지 전체로 움직일 수 있습니다 !! 이건 말도 안돼.
dezman 2013 년

Firefox Mac에서 페이지 전체에서 핸들을 이동할 수 있습니다. 조건부 if (ipad | iphone) ... then draggable ()을 배치해야하는지 궁금합니다.
Joe Hyde

13
위의 내 원래 의견을 긁으십시오. 이 플러그인을 HEAD에 포함하는 것만으로 작동합니다. $ (selector) .draggable ();을 추가하지 않음으로써 <script src>를 추가하십시오. 슬라이더 핸들이 작동하도록합니다.
Joe Hyde

6
터치 펀치 스크립트 만 포함하면됩니다. @JoeHyde가 그의 두 번째 주석에서 말했듯이, 어떤 요소에서도 .draggable ()을 호출 할 필요가 없습니다. 스크립트를 포함하기 만하면 작동합니다.
Jack Vial

22

이것에 대한 새로운 정보를 추가하고 싶었습니다. 터치 펀치는 Ipad 및 Android 장치에서 잘 작동합니다. 그러나 슬라이더는 Windows 모바일 장치에서 작동하지 않습니다 (최신 버전의 jquery ui 및 Touch 펀치 사용).

수정은 매우 간단합니다. .ui-slider-handle에 다음 CSS 규칙을 추가하기 만하면됩니다.

-ms-touch-action: none;
touch-action: none;

도움이 되었기를 바랍니다


나를 위해 일하지 않습니까? 어떤 예를 링크하십시오 @Stijn_d
ShibinRagh

어,하지만 이것은 실제 터치 펀치의 기능을 파괴합니다
user151496

이것은 내 문제를 해결했습니다. 감사!
parker_codes


6

@dazbradbury가 제안 했듯이 touchpunch 라이브러리는 마우스 이벤트를 터치 이벤트로 변환하는 데 도움이 될 수 있습니다. .draggable ()의 매개 변수는 슬라이더의 이동을 제한하므로 슬라이더 부모를 넘어서 이동할 수 없습니다.

<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.17/jquery-ui.min.js"></script>
<script src="jquery.ui.touch-punch.min.js"></script>
<script>
$(".ui-slider-handle").draggable({ 
    axis: "x",
    containment: "parent"
});
</script>

편집 : 이미 Jquery UI 슬라이더를 사용중인 경우 터치 펀치 라이브러리 만 포함하면됩니다. .ui-slider-handle에 대해 .draggable ()을 호출하지 마십시오. 기존 기능을 덮어 쓰게됩니다.


이것은 나를 위해 일했습니다. 유일한 문제는 배경 영역 (범위 : "min"이 설정된 경우)이 슬라이더 위치를 따르지 않는다는 것입니다.
ejectamenta

5

나는 같은 문제가 있었다. 저는 jQuery UI의 슬라이더에 정교한 슬라이더 UI를 개발하여 모바일에서 전혀 작동하지 않는다는 것을 깨달았습니다. 여기에 나열된 제안을 시도했지만 jQuery UI Slider만을 기반으로하는 사용자 지정 솔루션이 있으므로 작동하지 않았습니다.

noUiSlider를 사용 하십시오 .

jQuery UI 슬라이더 위에 구축 한 것과 같은 모든 정교한 기능 (및 훨씬 더)을 수행합니다. 모바일 장치에서 아름답게 작동하며 스타일도 쉽습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.