2013-03-15 4 views
0

브라우저에 초점이 맞았고 마우스가 움직이면 AJAX를 멈추는 깔끔한 방법을 만들려고합니다. 그래서 여기에 내가 원하는 것이 있습니다 :블러 (blur) 함수 내부에서 Mousemovent를 감지합니다.

사용자가 브라우저의 다른 탭으로 이동하거나 창을 최소화하거나 웹 응용 프로그램이 아닌 다른 곳으로 이동하면 1 분 안에 AJAX 호출을 중단 시키길 원합니다. 사용자가 웹 앱에서 마우스를 아무 곳으로나 움직이면 사용자는 앱에 "집중"한 것으로 간주하여 Ajax 호출을 계속 진행해야합니다. "timeout"부분을 처리하기 위해 "st"라는 시간 초과를 설정했지만 마우스 탐지기를 추가하는 것은 조금 더 발전되었습니다.

var window_focus = true; 
$(document).ready(function() {  

    $('#alertbox').click(function() { 
     $('#alertbox').slideUp("slow"); 
    }); 

    // Check focal point 
    $(window).focus(function() { 
     if (window_focus) { 
      return 
     } 
     window_focus = true; 
     waitForMsg(); 

    }).blur(function() { 
     if (!window_focus) { 
      return 
     } 
     console.log('Init Suspension...'); 
     // Set Timeout 
     $(function() { 
      st = setTimeout(function() { 
       clearTimeout(setTimeoutConst); 
       window_focus = false; 
       document.title = 'Timed Out | WEBSITE'; 
       console.log('Suspended'); 
      }, 60000);  
     }); 
    }); 

    waitForMsg(); 
}); 

내가 이런 식으로 추가하려고 거라고 :

$(function() { 
    $().mousemove(function() { 
     console.log('Reinitialize'); 
     clearTimeout(st); 
     waitForMsg(); 
    }); 
}); 

을하지만 그것은 작동하지 않았다 여기에 내가 가진거야. 당신의 도움을 주셔서 감사합니다.

+0

당신은'$ (문서) .mousemove' 시도가 아약스 호출 방법이 jsfiddle

var window_focus = true, lastMouseMoveTime; $(document).ready(function() { lastMouseMoveTime = new Date().getTime(); $('#alertbox').click(function() { $('#alertbox').slideUp("slow"); }); // Check focal point $(window).focus(function() { if (window_focus) { return } window_focus = true; waitForMsg(); }).blur(function() { if (!window_focus) { return } window_focus = false; console.log('Init Suspension...'); // Set Timeout }); waitForMsg(); $(document).mousemove(function(){ lastMouseMoveTime = new Date().getTime(); if(!window_focus){ waitForMsg(); // restarting ajax if it stopped because of mousemove. } }); }); 

를 시도? 처음에 그 mousemove를 취소 하시겠습니까 아니면 그냥 미쳐 버리시겠습니까? – Popnoodles

+0

@popnoodles 나는 그것을 시도하지 않았다. 나는 "st"타임 아웃 타이머를 취소하고 일반처럼 ajax 호출을 계속하고 싶다. 그것이 마우스 움직임을 감지하면, 나는 그것이 초점에 있다고 생각하는쪽으로 되돌아 가기를 원합니다. – greycode

+0

@popnoodles 기본적으로 다른 창으로 간 다음 다시 그 창으로 돌아갈 때까지 다시 초점이 맞지 않을 것이라고 생각합니다. 마우스가 움직이는 것을 감지하면 초점이 맞았다 고 생각하고 싶습니다. – greycode

답변

0

http://jsfiddle.net/popnoodles/5mqMm/

당신은 아마이 .one()를 사용합니다. 창을 다시로드하거나 다른 페이지에 올 때까지 마우스를 움직여서 프로 시저를 실행하고 다시 실행하지 않습니다.

흐림 안쪽에 넣으면 흐리게 처리됩니다. 다시 설정합니다.

}).blur(function() { 
    $(document).one('mousemove', function(){ 
     // i react ONCE to the mouse being moved 
     console.log('Reinitialize'); 
     clearTimeout(st); 
     waitForMsg(); 
     // focus the window again as desired 
     $(window).trigger('focus'); 
    }); 
    if (!window_focus) { 
     return 
    } 
    console.log('Init Suspension...'); 
    // Set Timeout 
    $(function() { 
     st = setTimeout(function() { 
      clearTimeout(setTimeoutConst); 
      window_focus = false; 
      document.title = 'Timed Out | WEBSITE'; 
      console.log('Suspended'); 
     }, 60000);  
    }); 
}); 
+0

이것을 .blur 함수로 구현할 수 있습니까? 근본적으로 그것이 초점에 있다고 생각하도록 강요합니까? – greycode

+0

'$ (window) .trigger ('focus');는 그렇게해야하지만 이전에 윈도우에서 트리거하지 않았다. – Popnoodles

+0

그래도 작동하는 것처럼 보이지만 사용자가 멀리 탐색하면 다시 흐리게 표시되지 않습니다. 귀하의 답변에 제 코드를 추가하겠습니다. – greycode

0

if(!window_focus){ 
    if(new Date().getTime() - lastMouseMoveTime > 60*1000){ 
      return; 
    } 
} 
+0

이것은 아주 좋습니다! 너는 최고야! 몇 가지 : 1 : 댓글 영역에 내 st 타이머를 복사해야합니까? 마우스를 창으로 다시 이동 시키면 Ajax 호출이 다시 시작되지 않습니다. 내가 어떻게 그 일이 일어나길 원하는지에 대한 이전의 대답에서 나의 긴 코멘트를 보라. 감사합니다 @ 수필! – greycode

+0

창이 초점이 맞지 않지만 마우스가 움직이는 것을 감지하면 계속해서 6000ms 동안 아약스를 호출하기를 원합니다. – greycode

+0

blured 창에서 mousemove 이벤트를 가져올 수 없습니다. – Anoop