iPhone / iPad 용 자바 스크롤 스크롤 이벤트?
iPad에서 스크롤 이벤트를 배치 할 수없는 것입니다. 이 작업 중 어느 것도 내가 뭘 잘못하고 있습니까?
window.onscroll=myFunction;
document.onscroll=myFunction;
window.attachEvent("scroll",myFunction,false);
document.attachEvent("scroll",myFunction,false);
Windows의 Safari 3 작동합니다. PC의 모든 브라우저는 window.onload=
기존 이벤트를 방해해도 괜찮다면 지원 합니다. 하지만 아이 패드는 사용하지 않습니다.
iPhoneOS는 onscroll
한 방식이 아닌 경우를 제외하고 이벤트를 배치 합니다.
한 손가락 이동은 사용자가 이동을 중지 할 때까지 이벤트를 생성하지 않습니다
onscroll
. 페이지가 이동을 중지하고 다시 그릴 때 이벤트가 중지됩니다 (그림 6-1 참조).
두 손가락으로 마찬가지로 스크롤하면 스크롤을 onscroll
중지 한 후에 만 실행 됩니다.
처리기를 설치하는 일반적인 방법은 예를 들어 작동합니다.
window.addEventListener('scroll', function() { alert("Scrolled"); });
// or
$(window).scroll(function() { alert("Scrolled"); });
// or
window.onscroll = function() { alert("Scrolled"); };
// etc
iOS의 경우 다음 과 같이 touchmove 이벤트와 스크롤 이벤트 를 많이합니다 .
document.addEventListener("touchmove", ScrollStart, false);
document.addEventListener("scroll", Scroll, false);
function ScrollStart() {
//start of scroll event for iOS
}
function Scroll() {
//end of scroll event for iOS
//and
//start/end of scroll event for other browsers
}
이전 게시물에 다른 답변을 추가하여 죄송하지만 일반적 으로이 코드를 사용하여 스크롤 이벤트를 매우 잘 얻습니다 (최소 6.1에서 작동합니다)
element.addEventListener('scroll', function() {
console.log(this.scrollTop);
});
// This is the magic, this gives me "live" scroll events
element.addEventListener('gesturechange', function() {});
그리고 그것은 나를 위해 작동합니다. 하지 않는 유일한 일은 스크롤의 감속에 대한 스크롤 이벤트를 제공하는 것입니다 (감속이 완료되면 최종 스크롤 이벤트가 발생하고 원하는대로 수행합니다.)하지만 이렇게해서 CSS로 관성을 수행합니다.
-webkit-overflow-scrolling: none;
당신은 당신의 요소를 얻을 수 있습니다.
document.addEventListener('touchmove', function(e) {e.preventDefault();}, true);
iScroll을 사용 하여이 문제에 대한 해결책을 얻을 수 있습니다. 모멘텀 스크롤링과 모든 것이 안심입니다. https://github.com/cubiq/iscroll github doc는 훌륭했고 저는 대부분 그것을 따랐습니다. 내 구현에 대한 세부 정보는 다음과 달라집니다.
HTML : iScroll에서 사용할 수있는 일부 div에서 콘텐츠의 스크롤 가능 영역을 래핑했습니다.
<div id="wrapper">
<div id="scroller">
... my scrollable content
</div>
</div>
CSS : "터치"에 Modernizr 클래스를 사용하여 스타일 변경 사항을 터치 장치에만 적용했습니다 (터치 할 때만 iScroll을 인스턴스화하고 있었음).
.touch #wrapper {
position: absolute;
z-index: 1;
top: 0;
bottom: 0;
left: 0;
right: 0;
overflow: hidden;
}
.touch #scroller {
position: absolute;
z-index: 1;
width: 100%;
}
JS : iScroll 다운로드에서 iscroll-probe.js를 포함시킨 다음 같이 스크롤러 초기화했습니다. 여기서 updatePosition은 새 스크롤 위치에 반응하는 내 함수입니다.
# coffeescript
if Modernizr.touch
myScroller = new IScroll('#wrapper', probeType: 3)
myScroller.on 'scroll', updatePosition
myScroller.on 'scrollEnd', updatePosition
스크롤 오프셋을 보는 대신 myScroller를 사용하여 현재 위치를 가져와야합니다. 다음은 http://markdalgleish.com/presentations/embracingtouch/ 에서 가져온 기능입니다 (매우 유용한 기사이지만 지금은 약간 구식 임).
function getScroll(elem, iscroll) {
var x, y;
if (Modernizr.touch && iscroll) {
x = iscroll.x * -1;
y = iscroll.y * -1;
} else {
x = elem.scrollTop;
y = elem.scrollLeft;
}
return {x: x, y: y};
}
유일한 다른 문제는 가끔 스크롤하려는 페이지의 일부를 잃어 버리고 스크롤을 거부한다는 것입니다. #wrapper의 내용을 변경할 때마다 myScroller.refresh ()에 대한 일부 호출을 추가해야했고 문제가 해결되었습니다.
편집 : 또 다른 문제는 iScroll이 모든 "클릭"이벤트를 먹는다는 것입니다. iScroll에서 "탭"이벤트를 내보내고 "클릭"이벤트 대신 처리하도록 옵션을 설정했습니다. 고맙게도 스크롤 영역을 많이 클릭 할 필요가 없었기 때문에 큰 문제가 아니 었습니다.
iOS 8이 나왔기 때문에이 문제는 더 이상 존재하지 않습니다. 스크롤 이벤트는 이제 iOS Safari에서도 원활하게 시작됩니다.
따라서 scroll
이벤트 핸들러 를 등록하고 해당 이벤트 핸들러 window.pageYOffset
내부를 확인 하면 모든 것이 잘 작동합니다.
참고 URL : https://stackoverflow.com/questions/2863547/javascript-scroll-event-for-iphone-ipad
'IT' 카테고리의 다른 글
목록에서 n 번째 항목을 모두 가져 오는 방법 (0) | 2020.08.11 |
---|---|
WinForms의 TextBox에서 포커스를 제거하는 방법은 무엇입니까? (0) | 2020.08.11 |
자바에서 노드를 공유 배열로 변환 (0) | 2020.08.11 |
로컬 네트워크 사용자가 내 WAMP 사이트에 액세스 할 수있는 방법은 무엇입니까? (0) | 2020.08.11 |
자바 펼쳐 쿼리 (0) | 2020.08.11 |