2012-06-05 2 views
1

은 JavaScript 기능이 실행되는 동안로드 이미지를 표시하는 방법입니다. 내가 jQuery를 - 아약스 기능 같은 것을 가질 수 있다면 좋을 텐데, 약 2~5초 소요 하나가JavaScript 기능이 실행되는 동안 이미지로드

$("#loading").bind("ajaxStart", function(){ 
    $(this).attr("style", "visibility: visible") 
}).bind("ajaxStop", function(){ 
    $(this).attr("style", "visibility: hidden") 
}); 

설명 편집 :

아이디어는 그 때마다 자바 스크립트 함수가 실행되고 3/4 초가 걸리며 로딩 이미지가 표시됩니다. 이 Ajax 함수와는 아무런 관련이 없습니다. 항상 실행중인 JavaScript를 잡아서 타이밍을 정하는 것과 같은 원리입니다.

감사합니다.

+1

'@ (...). show()'와'$ (...). hide()'는 가시성을위한 jquery 메소드입니다. – Aren

+0

@Aren은 캐치를 가져 주셔서 감사합니다. 왜 내가 이렇게하고 있는지 알지 못합니다. – 1252748

+0

@thomas jQuery show 및 hide 메서드는 요소의 "display"특성을 "none"또는 "block"(또는 "none"이전의 모든 요소)으로 설정합니다. 이는 가시성 속성을 설정하는 여기에서하는 작업과 조금 다릅니다. 이 차이가 발생하는 한 번은 표시하지 않고 이미지의 크기를 가져오고 싶을 때 디스플레이가 "none"으로 설정된 경우 작동하지 않는 경우입니다. –

답변

9

그럼 ... 댓글을 달았다면 모든 것이 바뀝니다.

어떤 자바 스크립트도이 실행될 때 자동으로 표시되지 않도록 설정할 수 있습니다. 그러나 사용자 정의 이벤트를 사용하여 .trigger().bind()을 사용하여 jquery 사용자 정의 이벤트를 활용할 수 있습니다.

$("#Something").click(function() { 
    $('body').trigger('Custom.BeginWork'); 
    setTimeout(function() { DoWorkFunction(/* you can pass params here if you need */); }, 0); 
    // Causes it to be executed in the background 0ms from now 
}); 

function DoWorkFunction() { 
    // Stuff... 

    $('body').trigger('Custom.EndWork'); 
} 

그런 다음 많은 .ajaxStart().ajaxStop()

$('#Working').bind('Custom.StartWork', function() { 
    $(this).show(); 
}); 

$('#Working').bind('Custom.EndWork', function() { 
    $(this).hide(); 
}); 
같은 .bind() 이벤트를 등록 :

function myFunctionThatDoesSomething() { 
    $('body').trigger('Custom.BeginWork'); 

    // Do Something ... 

    $('body').trigger('Custom.EndWork'); 
} 

비록 장기 실행 작업은 아마 그래서 그들은 이벤트에서 차단되지 않는 비동기을 수행해야합니다

여기에 working jsFiddle Example입니다.


업데이트 : 당신은 이중 setTimeout을했습니다 your jsFiddle에서

. 다음은이가 번역 무엇

setTimeout(function() { 
     // Call Operation Here 
     try { setTimeout(function() { LongRunningOperation(10000); }, 1000); 
     } 
     finally 
     { 
      $("body").trigger('Custom.End'); 
     } 
    }, 50); // 50ms delay because some browsers *cough*IE*cough* are slow at rendering dom changes 

은 다음과 같습니다

Diagram

는 그래서 Custom.End 이벤트가 완료하지 않을 경우, 실행 일정 장기 실행 기능 후 해고된다. setTimeout비동기이며 비 블로킹입니다.

+0

아니요, 저는 AJAX를 예제로 사용하고 있습니다. Javascript가 실행될 때마다로드하는 이미지를 보여줄 무언가를 찾고 있습니다.감각적으로 생각하면 아마도 3/4 초 이상 걸린다. 내 질문에서 명확하지 않다. – 1252748

+1

''javascript가 실행될 때마다 '초의 3/4'얼마나 많은 JS 라인이 실행되고 있는가? ajax/다른 DOM 요소를 비동기 적으로로드하는 경우가 아니면 브라우저가 작동을 멈 춥니 다. 'timeOut' /'interval'이나 애니메이션에 대해서 말하지 않는다면 말입니다. 비동기가 아닌 코드 조각을 실행하기 위해 몇 밀리 초 이상 걸리는 샘플 코드 또는 링크를 제공하십시오. –

+0

@ FabrícioMatté 내 질문에 대한 중간 해석 때문에 내 답변이 원래 달라졌습니다. 나는 그가 ajax 응답을 기다리는 것과 비교해 계산 상일 수있는 장기 실행 연산에 대해 동일한 것을 원한다고 생각한다. 3/4 초는 사용자가 UX 관련 문제에 대한 가이드 라인에 더 가깝다고 생각합니다. 사용자가 3/4 초 이상 기다려야하는 경우 작업이 완료되고 있음을 시각적으로 표시하기를 원합니다. – Aren

관련 문제