2011-08-20 6 views
0

페이지가로드되는 동안 "로딩"자리 표시 자 상자를 표시하려면 페이지 상단에 포함시킬 수있는 js 파일을 찾았습니다. 문제는 차트와 같은 다른 요소를로드하는 데 오래 걸리면 차트가로드되지 않아도이 자리 표시자가 페이지에 표시되지 않습니다. 모든 요소를 ​​포함하여 페이지의 100 %가로드 될 때까지이 자리 표시자를 유지하도록이 코드를 수정하는 방법이 있습니까? 모두로드 될 때까지로드 진행률을 표시하는 브라우저와 유사합니다.미리로드 페이지 자리 표시 자 jQuery 플러그인

다음은이 JS 파일에 대한 코드입니다 :

var jQueryLoaderOptions = null; 
(function(a) { 
    a.loader = function(d) { 
     switch (d) { 
     case "close": 
      if (jQueryLoaderOptions) { 
       if (a("#" + jQueryLoaderOptions.id)) { 
        a("#" + jQueryLoaderOptions.id + ", #" + jQueryLoaderOptions.background.id).remove() 
       } 
      } 
      return; 
      break; 
     case "setContent": 
      if (jQueryLoaderOptions) { 
       if (a("#" + jQueryLoaderOptions.id)) { 
        if (a.loader.arguments.length == 2) { 
         a("#" + jQueryLoaderOptions.id).html(a.loader.arguments[1]) 
        } else { 
         if (console) { 
          console.error("setContent method must have 2 arguments $.loader('setContent', 'new content');") 
         } else { 
          alert("setContent method must have 2 arguments $.loader('setContent', 'new content');") 
         } 
        } 
       } 
      } 
      return; 
      break; 
     default: 
      var b = a.extend({ 
       content: "<div>Loading ...</div>", 
       className: "loader", 
       id: "jquery-loader", 
       height: 70, 
       width: 70, 
       zIndex: 30000, 
       background: { 
        opacity: 0.4, 
        id: "jquery-loader-background" 
       } 
      }, d) 
     } 
     jQueryLoaderOptions = b; 
     var c = a(document).height(); 
     var e = a(window).width(); 
     var g = a('<div id="' + b.background.id + '"/>'); 
     g.css({ 
      zIndex: b.zIndex, 
      position: "absolute", 
      top: "0px", 
      left: "0px", 
      width: e, 
      height: c, 
      opacity: b.background.opacity 
     }); 
     g.appendTo("body"); 
     if (jQuery.bgiframe) { 
      g.bgiframe() 
     } 
     var f = a('<div id="' + b.id + '" class="' + b.className + '"></div>'); 
     f.css({ 
      zIndex: b.zIndex + 1, 
      width: b.width, 
      height: b.height 
     }); 
     f.appendTo("body"); 
     f.center(); 
     a(b.content).appendTo(f) 
    }; 
    a.fn.center = function() { 
     this.css("position", "absolute"); 
     this.css("top", (a(window).height() - this.outerHeight())/2 + a(window).scrollTop() + "px"); 
     this.css("left", (a(window).width() - this.outerWidth())/2 + a(window).scrollLeft() + "px"); 
     return this 
    } 
})(jQuery); 

과 같이 호출 :

$(".preloader").click(function(){ $.loader({ className:"ajLoad", content:"" }); }); 
+2

일에 대해 코드를하려고하는 ... 그 창, 뭔가 등으로 부하 문 참조를 사용할 수 있습니까? – genesis

+0

죄송합니다, 무슨 뜻인지 모르겠습니다. 페이지의 모든 요소가 100 %로드 될 때까지 표시 할 자리 표시자가 필요합니다 ... – santa

+0

표시되는로드 진행률은 브라우저마다 다릅니다. 예를 들어 일부 브라우저 (예 : Safari)는 AJAX 호출 (예 : 백그라운드로드)에 대한로드 진행률을 표시하지만 Firefox는 그렇지 않습니다. 따라서로드 진행률을 표시하기 위해 어떤 요소를 사용할지 결정됩니다. –

답변

1

당신은 아마 사용중인 플러그인 그냥 document.ready 함수를 기다립니다. 호출 한 사용자 정의 이벤트를 수신하도록 코드를 수정하고 코드가 document.ready 또는 페이지의 마지막 요소가로드 될 때 코드가 실행되도록해야합니다.

이 코드는 작동하지만 복잡한 코드 일 수 있습니다. 페이지에 내용이로드되어 있어야합니다.

+0

모든 요소가로드되지 않아도 document.ready가 true가됩니다. 진행 상황을 표시 할 때 브라우저는 어떤 점을 보입니까? 나는 비슷한 것을 할 수 있을까? – santa

+0

기본적으로 null로 설정되거나 ID가 제공되면 특정 요소 (ID 이름)를 기다릴 수있는 추가 매개 변수를 추가하여 수정할 수 있습니까? – santa

+0

document.ready는 비동기 스크립트가 모두로드되었는지 확인하지 않고 DOM 준비를 찾고 있습니다. 사이트의 나머지 부분에서 비동기로 데이터를로드한다고 가정합니다. 수정 document.ready? 나는 당신이 그것을 사용하는 경우 jQuery를 수정하지 않을 것입니다 :/ – HaloZero

0

이 자리 표시자를 유지하기 위해이 코드를 수정하여 페이지의 100 % (모든 요소 포함)까지로드 할 수 있습니까? 모두로드 될 때까지로드 진행률을 표시하는 브라우저 과 유사합니다.

당신은

$(window).load(function() { 
    // put your code here... 

}); 
// NB : put this code before your </head> 
+0

어떤 코드를 넣어야합니까? 이거 그냥? $ .loader ({className : "ajLoad", content : ""})); – santa

+0

예를보세요 : http://jsfiddle.net/toopay/5QJf5/1/ – toopay

+0

예를 들어, 그가 플래시의 일부 요소 (또는 실버 라이트)를 갖고 있지 않으면 작동합니다. 플래시 요소가 아직로드되지 않은 경우에도로드 * 이벤트가 발생합니다. 해결책은 Flash의 externalInterface를 사용하고 신호가로드가 완료되었다고 신호하지 않는 한 신호가 자리 표시자를 숨기지 않는 것입니다. – WTK

관련 문제