이 문제에 대한 많은 기사를 읽었습니다. 예를 들어 변수를 사용하여 실행 간격을 기록하십시오. 나는 매번 가서 자위해야한다고 생각합니다. 나는 벽돌을 움직이기 전에 도구를 선택하는 것을 좋아합니다. 실제로 솔루션은 매우 간단합니다. Iscroll은 실제로 브라우저를 클릭 할 때 TouchStart 및 Touchend 이벤트를 가로 채 웁니다. TouchEnd시 js를 사용하여 요소 (function_end)의 onclick 이벤트를 트리거하십시오. 실제 작업에서 터치 엔드가 먼저 실행 된 다음 OnClick 관련 기능이 다시 실행됩니다. 이것은 한 번의 클릭으로 두 번 트리거하는 두통을 만듭니다. 이것은 문제가 아닙니다. 이것이 문제 인 이유는 iscroll의 소스 코드를 살펴 봐야하기 때문입니다. 이 문제를 해결하는 방법은 기능을 두 번째로 실행하는 것을 거부하는 것입니다. 그리고 내 논리는 정확히 그 사실입니다. _end 함수에서 클릭 이벤트를 트리거하는 코드를 실행 한 후 OnClick 이벤트에서 바인딩 된 함수를 제거 할 수 있습니다. 그런 다음 수백 밀리 초 후에이 이벤트를 다시 추가하십시오. 예를 들어:
코드 사본은 다음과 같습니다.
// 처리하기 전에
<span onclick = "test ()"> 테스트 </span>을 두 번 클릭하십시오
// 처리 후
<span onclick = "void (0)"> 테스트 </span>을 두 번 클릭하십시오
OnClick 관련 기능을 제거한 후 두 번째로 자연스럽게 테스트 기능이 트리거되지 않습니다. 다음에 계속 사용하려면 Settimeout을 사용하여 Onclick의 내용을 복원 할 수 있습니다.
수정 된 Iscroll 소스 코드 (_end 함수에서 약 550 줄에서 570 줄) :
코드 사본은 다음과 같습니다.
that.doubletaptimer = settimeout (function () {
that.doubletaptimer = null;
// 마지막으로 터치 된 요소를 찾습니다
대상 = point.target;
while (target.nodeType! = 1) target = target.parentNode;
if (target.tagname! = 'select'&& target.tagname! = 'input'&& target.tagname! = 'textarea') {
ev = doc.createevent ( 'mouseevents');
ev.initmouseevent ( 'click', true, true, e.view, 1,
point.screenx, point.screeny, point.clientx, point.clienty,
e.ctrlkey, e.altkey, e.shiftkey, e.metakey,
0, null);
ev._fake = true;
target.dispatchevent (EV);
/** 다음 코드는 새 코드입니다 **/
// 클릭 이벤트를 바인딩하는 요소를 찾습니다.
var obj = $ (대상) .attr ( "onclick")! = null? $ (대상) : $ (target) .parents ( "[onclick]") [0];
if (obj! = null) {
var clickContent = $ (obj) .attr ( "onclick");
if (clickContent! = "void (0)") {
// 새 속성을 사용하여 원래 클릭 함수를 저장합니다
$ (obj) .attr ( "data-clickbak", $ (obj) .attr ( "onclick"));
// onclick 속성의 값을 변경합니다.
$ (obj) .attr ( "onclick", "void (0)");
// 폭력 클릭을 방지합니다
if (that.hashbox.length> 0) {
for (var _i = 0; _i <that.hashbox.length; _i ++)
{
if (that.hashbox [_i] == $ (obj)) {
that.hashbox.splice (_i, 1);
부서지다;
}
}
}
that.hashbox.push ($ (obj));
that._clickback ();
}
}//끝
}
}, that.options.zoom? 250 : 0);
_clickback 함수 및 해외 코드 스 니펫 (_end 함수 전에 추가)
코드 사본은 다음과 같습니다.
Hashbox : [],
/*클릭 된 객체의 이벤트 복원*/
_clickback : function () {
var that = this;
settimeout (function () {
if (that.hashbox.length> 0) {
var obj = that.hashbox.pop ();
obj.attr ( "onclick", obj.attr ( "data-clickbak"));
if (that.hashbox.length> 0) that._clickback ();
}
}, 500);
}
물론 Iscroll 소스 코드를 수정하지 않고 공개 기능을 통해 구현할 수도 있습니다.
위는이 기사에 관한 것입니다. 모든 사람들이 Iscroll 슬라이딩 컨트롤 사용을 배우는 것이 도움이되기를 바랍니다.