[JQUERY] 자바 스크립트 / JQuery와 : $ (창) 크기 조정이 완료된 후 어떻게 화재 .resize?
JQUERY자바 스크립트 / JQuery와 : $ (창) 크기 조정이 완료된 후 어떻게 화재 .resize?
해결법
-
1.여기에 코드의 여러 위치에서 호출 할 수있는 CMS의 솔루션의 수정이다 :
여기에 코드의 여러 위치에서 호출 할 수있는 CMS의 솔루션의 수정이다 :
var waitForFinalEvent = (function () { var timers = {}; return function (callback, ms, uniqueId) { if (!uniqueId) { uniqueId = "Don't call this twice without a uniqueId"; } if (timers[uniqueId]) { clearTimeout (timers[uniqueId]); } timers[uniqueId] = setTimeout(callback, ms); }; })();
용법:
$(window).resize(function () { waitForFinalEvent(function(){ alert('Resize...'); //... }, 500, "some unique string"); });
당신이 한 번만를 호출하는 경우 CMS의 솔루션은 괜찮지 만, 여러 번, 예를 호출하는 경우 코드의 다른 부분은 창 크기 조정에 대한 별도의 콜백을 설정 한 경우 타이머 변수를 공유 c를, 그것은 / B를 실패합니다.
이 수정을 사용하면 각 콜백에 대한 고유 ID를 제공하고, 그 고유 ID는 이벤트가 별도의 모든 시간 제한을 유지하는 데 사용됩니다.
-
2.나는 이벤트를 만들 것을 선호 :
나는 이벤트를 만들 것을 선호 :
$(window).bind('resizeEnd', function() { //do something, window hasn't changed size in 500ms });
여기 당신이 그것을 만드는 방법은 다음과 같습니다
$(window).resize(function() { if(this.resizeTO) clearTimeout(this.resizeTO); this.resizeTO = setTimeout(function() { $(this).trigger('resizeEnd'); }, 500); });
당신은 글로벌 자바 스크립트 파일 곳이있을 수 있습니다.
-
3.나는 반복 작업을 지연하기위한 다음과 같은 기능을 사용하여, 당신의 경우에 작동합니다 :
나는 반복 작업을 지연하기위한 다음과 같은 기능을 사용하여, 당신의 경우에 작동합니다 :
var delay = (function(){ var timer = 0; return function(callback, ms){ clearTimeout (timer); timer = setTimeout(callback, ms); }; })();
용법:
$(window).resize(function() { delay(function(){ alert('Resize...'); //... }, 500); });
전달 된 콜백 함수는 사용자 입력을 정지했을 때 등, 검출과 같은 다른 목적을 위해 유용한 찾기를 달리 타이머가 초기화되고, 지연에 대한 최근의 콜이 지정된 시간 이후에 만들어진 때만 실행할 ..
-
4.당신이 Underscore.js가 설치되어있는 경우, 당신은 할 수 :
당신이 Underscore.js가 설치되어있는 경우, 당신은 할 수 :
$(window).resize(_.debounce(function(){ alert("Resized"); },500));
-
5.앞서 언급 한 솔루션 중 일부는보다 일반적인 사용의 경우에도, 나를 위해 작동하지 않았다. 또한 나는 창 크기 조정에서 일을했다이 하나를 발견했습니다 :
앞서 언급 한 솔루션 중 일부는보다 일반적인 사용의 경우에도, 나를 위해 작동하지 않았다. 또한 나는 창 크기 조정에서 일을했다이 하나를 발견했습니다 :
$(window).bind('resize', function(e){ window.resizeEvt; $(window).resize(function(){ clearTimeout(window.resizeEvt); window.resizeEvt = setTimeout(function(){ //code to do after window is resized }, 250); }); });
-
6.데이비드 월시에 많은 감사합니다, 여기에 밑줄 디 바운스의 바닐라 버전입니다.
데이비드 월시에 많은 감사합니다, 여기에 밑줄 디 바운스의 바닐라 버전입니다.
암호:
// Returns a function, that, as long as it continues to be invoked, will not // be triggered. The function will be called after it stops being called for // N milliseconds. If `immediate` is passed, trigger the function on the // leading edge, instead of the trailing. function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; };
간단한 사용법 :
var myEfficientFn = debounce(function() { // All the taxing stuff you do }, 250); $(window).on('resize', myEfficientFn);
참조 : http://davidwalsh.name/javascript-debounce-function
-
7.내가 아는 한 크기 조정이 꺼져 정확히 향후 사용자의 행동을 모르는 간단하기 때문에 사실, 당신은 어떤 작업을 할 수 없습니다. 하지만 당신은이 시간보다 조금 더 기다려 더 크기 조정은, 당신이 당신의 함수를 호출 할 수 있습니다 이루어지지 않습니다 그렇다면,이 개 크기 조정 이벤트 사이에 전달되는 시간을 가정 할 수 있습니다. 아이디어는 우리가 저장하거나 삭제하기 위해에서는 setTimeout과의 ID를 사용한다는 것입니다. 예를 들어 우리는 그러므로 우리가 750ms를 기다리는 두 개의 크기 조정 이벤트 사이의 시간이 500ms로 알고있다.
내가 아는 한 크기 조정이 꺼져 정확히 향후 사용자의 행동을 모르는 간단하기 때문에 사실, 당신은 어떤 작업을 할 수 없습니다. 하지만 당신은이 시간보다 조금 더 기다려 더 크기 조정은, 당신이 당신의 함수를 호출 할 수 있습니다 이루어지지 않습니다 그렇다면,이 개 크기 조정 이벤트 사이에 전달되는 시간을 가정 할 수 있습니다. 아이디어는 우리가 저장하거나 삭제하기 위해에서는 setTimeout과의 ID를 사용한다는 것입니다. 예를 들어 우리는 그러므로 우리가 750ms를 기다리는 두 개의 크기 조정 이벤트 사이의 시간이 500ms로 알고있다.
VAR a를; $ (창) .resize (함수 () { 사항 clearTimeout (a); A =에서는 setTimeout (함수 () { 함수를 호출 // }, 750); });
-
8.전 세계적으로 지연 리스너를 선언합니다 :
전 세계적으로 지연 리스너를 선언합니다 :
var resize_timeout; $(window).on('resize orientationchange', function(){ clearTimeout(resize_timeout); resize_timeout = setTimeout(function(){ $(window).trigger('resized'); }, 250); });
그리고 크기가 조정 된 이벤트에 사용 리스너 아래에 당신이 원하는 :
$(window).on('resized', function(){ console.log('resized'); });
-
9.그것은 나를 위해 작동합니다. https://alvarotrigo.com/blog/firing-resize-event-only-once-when-resizing-is-finished/ -이 솔루션을 참조하십시오
그것은 나를 위해 작동합니다. https://alvarotrigo.com/blog/firing-resize-event-only-once-when-resizing-is-finished/ -이 솔루션을 참조하십시오
VAR resizeId; $ (창) .resize (함수 () { 사항 clearTimeout (resizeId); resizeId =에서는 setTimeout (doneResizing, 500); }); doneResizing 함수 () { // 우리가 원하는대로 }
-
10.지연 창 크기 조정 이벤트에 대한 간단한 jQuery 플러그인.
지연 창 크기 조정 이벤트에 대한 간단한 jQuery 플러그인.
크기 조정 이벤트에 새로운 기능을 추가
jQuery(window).resizeDelayed( func, delay, id ); // delay and id are optional
(ID의 선언에 의해) 제거 기능을 추가 이전
jQuery(window).resizeDelayed( false, id );
모든 기능을 제거
jQuery(window).resizeDelayed( false );
// ADD SOME FUNCTIONS TO RESIZE EVENT jQuery(window).resizeDelayed( function(){ console.log( 'first event - should run after 0.4 seconds'); }, 400, 'id-first-event' ); jQuery(window).resizeDelayed( function(){ console.log('second event - should run after 1.5 seconds'); }, 1500, 'id-second-event' ); jQuery(window).resizeDelayed( function(){ console.log( 'third event - should run after 3.0 seconds'); }, 3000, 'id-third-event' ); // LETS DELETE THE SECOND ONE jQuery(window).resizeDelayed( false, 'id-second-event' ); // LETS ADD ONE WITH AUTOGENERATED ID(THIS COULDNT BE DELETED LATER) AND DEFAULT TIMEOUT (500ms) jQuery(window).resizeDelayed( function(){ console.log('newest event - should run after 0.5 second'); } ); // LETS CALL RESIZE EVENT MANUALLY MULTIPLE TIMES (OR YOU CAN RESIZE YOUR BROWSER WINDOW) TO SEE WHAT WILL HAPPEN jQuery(window).resize().resize().resize().resize().resize().resize().resize();
사용법 출력 :
first event - should run after 0.4 seconds newest event - should run after 0.5 second third event - should run after 3.0 seconds
jQuery.fn.resizeDelayed = (function(){ // >>> THIS PART RUNS ONLY ONCE - RIGHT NOW var rd_funcs = [], rd_counter = 1, foreachResizeFunction = function( func ){ for( var index in rd_funcs ) { func(index); } }; // REGISTER JQUERY RESIZE EVENT HANDLER jQuery(window).resize(function() { // SET/RESET TIMEOUT ON EACH REGISTERED FUNCTION foreachResizeFunction(function(index){ // IF THIS FUNCTION IS MANUALLY DISABLED ( by calling jQuery(window).resizeDelayed(false, 'id') ), // THEN JUST CONTINUE TO NEXT ONE if( rd_funcs[index] === false ) return; // CONTINUE; // IF setTimeout IS ALREADY SET, THAT MEANS THAT WE SHOULD RESET IT BECAUSE ITS CALLED BEFORE DURATION TIME EXPIRES if( rd_funcs[index].timeout !== false ) clearTimeout( rd_funcs[index].timeout ); // SET NEW TIMEOUT BY RESPECTING DURATION TIME rd_funcs[index].timeout = setTimeout( rd_funcs[index].func, rd_funcs[index].delay ); }); }); // <<< THIS PART RUNS ONLY ONCE - RIGHT NOW // RETURN THE FUNCTION WHICH JQUERY SHOULD USE WHEN jQuery(window).resizeDelayed(...) IS CALLED return function( func_or_false, delay_or_id, id ){ // FIRST PARAM SHOULD BE SET! if( typeof func_or_false == "undefined" ){ console.log( 'jQuery(window).resizeDelayed(...) REQUIRES AT LEAST 1 PARAMETER!' ); return this; // RETURN JQUERY OBJECT } // SHOULD WE DELETE THE EXISTING FUNCTION(S) INSTEAD OF CREATING A NEW ONE? if( func_or_false == false ){ // DELETE ALL REGISTERED FUNCTIONS? if( typeof delay_or_id == "undefined" ){ // CLEAR ALL setTimeout's FIRST foreachResizeFunction(function(index){ if( typeof rd_funcs[index] != "undefined" && rd_funcs[index].timeout !== false ) clearTimeout( rd_funcs[index].timeout ); }); rd_funcs = []; return this; // RETURN JQUERY OBJECT } // DELETE ONLY THE FUNCTION WITH SPECIFIC ID? else if( typeof rd_funcs[delay_or_id] != "undefined" ){ // CLEAR setTimeout FIRST if( rd_funcs[delay_or_id].timeout !== false ) clearTimeout( rd_funcs[delay_or_id].timeout ); rd_funcs[delay_or_id] = false; return this; // RETURN JQUERY OBJECT } } // NOW, FIRST PARAM MUST BE THE FUNCTION if( typeof func_or_false != "function" ) return this; // RETURN JQUERY OBJECT // SET THE DEFAULT DELAY TIME IF ITS NOT ALREADY SET if( typeof delay_or_id == "undefined" || isNaN(delay_or_id) ) delay_or_id = 500; // SET THE DEFAULT ID IF ITS NOT ALREADY SET if( typeof id == "undefined" ) id = rd_counter; // ADD NEW FUNCTION TO RESIZE EVENT rd_funcs[id] = { func : func_or_false, delay: delay_or_id, timeout : false }; rd_counter++; return this; // RETURN JQUERY OBJECT } })();
-
11.마우스 커서가 창 크기 조정 후 문서에 반환해야한다고 가정하면, 우리는 onMouseover와 이벤트와 콜백과 같은 동작을 만들 수 있습니다. 예상대로이 솔루션은 터치 사용 화면이 작동하지 않을 수 있음을 잊지 마십시오.
마우스 커서가 창 크기 조정 후 문서에 반환해야한다고 가정하면, 우리는 onMouseover와 이벤트와 콜백과 같은 동작을 만들 수 있습니다. 예상대로이 솔루션은 터치 사용 화면이 작동하지 않을 수 있음을 잊지 마십시오.
var resizeTimer; var resized = false; $(window).resize(function() { clearTimeout(resizeTimer); resizeTimer = setTimeout(function() { if(!resized) { resized = true; $(document).mouseover(function() { resized = false; // do something here $(this).unbind("mouseover"); }) } }, 500); });
-
12.이것은 내가 구현 한 것입니다 :
이것은 내가 구현 한 것입니다 :
$ (창) .resize (함수 () { 에서는 setTimeout (된 SomeFuncion, 500); });
우리가 크기 조정은 500ms보다 적은 일이 예상되는 경우 우리는의 setTimeout을 취소 할 수 있습니다
행운을 빕니다...
from https://stackoverflow.com/questions/2854407/javascript-jquery-window-resize-how-to-fire-after-the-resize-is-completed by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 의 contentEditable <DIV>에 설정 커서 위치 (0) | 2020.10.01 |
---|---|
[JQUERY] 입력이 jQuery를 사용하여 소모되지 않았나요? (0) | 2020.10.01 |
[JQUERY] 때 jQuery를 대 바닐라 자바 스크립트를 사용 하는가? (0) | 2020.10.01 |
[JQUERY] jQuery.fn 무엇을 의미합니까? (0) | 2020.10.01 |
[JQUERY] jQuery를 자동 완성 태그 플러그인 StackOverflow의 입력 태그와 같은? [닫은] (0) | 2020.10.01 |