jQuery IE6 호 환 가능 한 스크롤 감청 기능 구현

이 사례 는 jQuery 가 IE6 를 호 환 할 수 있 는 스크롤 감청 기능 을 실현 하 는 것 을 보 여 준다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
사실 이 물건 은 원래 의 자바 script 으로 쓰 려 고 했 으 나,원생 의 자바 script 은 class 와 감청 스크롤 바 의 스크롤 이 너무 번 거 로 워 서 jQuery 에 올 랐 습 니 다.괜 찮 습 니 다.어쨌든 IE6 를 호 환 하면 됩 니 다.
다음 효 과 를 실현 합 니 다:

홈 페이지 에서 흔히 볼 수 있 는 스크롤 감청 이다.해당 제목 을 어디로 굴 리 면 왼쪽 스크롤 바 현재 제목 앞 에 있 는...'가 되 는 거 야',당연 하지.왼쪽 제목 도 클릭 할 수 있 고 바로 굴 러 갈 곳 으로 굴 러 갈 수 있어.
먼저 웹 페이지 레이아웃 부분 입 니 다.코드 는 다음 과 같 습 니 다.많은 자바 스 크 립 트 소 개 를 무시 하 십시오.단지 칸 을 차지 하고 효 과 를 설명 하기 위해 서 입 니 다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>    </title>
    <script type="text/javascript" src="js/jquery-1.11.1.js"></script>
    <script type="text/javascript" src="js/ie6fixed.js"></script>
  </head>
  <body>
    <div>
      <div style="float:left;width:20%;">
        <div id="scrollspy" style="position:fixed;">
        <div id="debug"></div>
        </div>
      </div>
      <div id="content" style="float:left;width:80%">
        <p class="title">    </p>
        <p>JavaScript is also used in environments that are not web-based, such as PDF documents, site-specific browsers, and desktop widgets. Newer and faster JavaScript virtual machines (VMs) and platforms built upon them have also increased the popularity of JavaScript for server-side web applications. On the client side, JavaScript has been traditionally implemented as an interpreted language, but more recent browsers perform just-in-time compilation. It is also used in game development, the creation of desktop and mobile applications, and server-side network programming with runtime environments such as Node.js.</p>
        <p class="title">  </p>
        <p>Netscape            LiveScript,      N            JavaScript[7]。JavaScript   Java        ,      “    Java”[8],          ,            Java。 JavaScript         Self Scheme[9]。JavaScript Java      ,                        。        ,     JScript   JavaScript     。     ,Ecma  (             )   ECMA-262  (ECMAScript)。       ECMAScript   。  JavaScript             ,                    ,  JavaScript         。</p>
        <p class="title">  </p>
        <p>           ,  PHP ASP,JavaScript                      ,         。             JavaScript          ,             :   。         ,                         , JavaScript       、           。  ,      ( AJAX)    Javascript        。     V8    Node.js   ,         IO   ,JavaScript             。</p>
        <p class="title">  2</p>
        <p>Netscape            LiveScript,      N            JavaScript[7]。JavaScript   Java        ,      “    Java”[8],          ,            Java。 JavaScript         Self Scheme[9]。JavaScript Java      ,                        。        ,     JScript   JavaScript     。     ,Ecma  (             )   ECMA-262  (ECMAScript)。       ECMAScript   。  JavaScript             ,                    ,  JavaScript         。</p>
      </div>
    </div>
  </body>
</html>

기본 사상 은 다음 과 같다.

여기
(1)열 두 번 째 줄 에 일부러 빈 칸 을 두 는 것 은
이 div 는 비어 있어 서 너비 가 없습니다.
(2)IE6 지원position:fixed속성 을 위해 다음 과 같은 ie6fixed.js 를 도 입 했 습 니 다.이 물건 의 출처 는 확인 할 수 없습니다.js 파일 을 새로 만 들 고 아래 코드 를 복사 하여 저장 합 니 다.웹 페이지 를 편집 할 때 IE6 지원 position:fixed 가 이 스 크 립 트 를 도입 하 는 동시에 IE6 에서 position:fixed 를 실현 할 스 크 립 트 에$("\#div 이름")를 사용 합 니 다.toFixed();겸용 하 다.
ie6fixed.js:

(function($){
  var isIE = !!window.ActiveXObject;
  var isIE6 = isIE && !window.XMLHttpRequest;
  var isIE8 = isIE && !!document.documentMode && (document.documentMode == 8);
  var isIE7 = isIE && !isIE6 && !isIE8;
  if (isIE6 || isIE7) { //ie6 | ie7 | ie8 not in standards mode
    $().ready(function(){
      var body = document.body;
      var BLANK_GIF;
      if (body.currentStyle.backgroundAttachment != "fixed") {
        if (body.currentStyle.backgroundImage == "none") {
          body.runtimeStyle.backgroundImage = "url(" + BLANK_GIF + ")"; // dummy
          body.runtimeStyle.backgroundAttachment = "fixed";
        }
      }
    });
  }
  $.fn.extend({
    toFixed: function(position){
      var isIE = !!window.ActiveXObject;
      var isIE6 = isIE && !window.XMLHttpRequest;
      var isIE8 = isIE && !!document.documentMode && (document.documentMode == 8);
      var isIE7 = isIE && !isIE6 && !isIE8;
      if (isIE6 || isIE7) {
      }
      else {
        return this;
      }
      return this.each(function(){
        var t = $(this);
        var id = t.get(0).id || 'fixed_' + parseInt(Math.rand() * 10000);
        var rect = {
          w: t.width(),
          h: t.height(),
          l: t.css('left'),
          r: t.css('right'),
          't': t.css('top'),
          b: t.css('bottom')
        };
        if (rect.l != 'auto') {
          rectl = parseInt(rect.l);
        }
        else {
          rectl = 0;
        }
        if (rect.r != 'auto') {
          rectr = parseInt(rect.r);
        }
        else {
          rectr = 0;
        }
        if (rect.t != 'auto') {
          rectt = parseInt(rect.t);
        }
        else {
          rectt = 0;
        }
        if (rect.b != 'auto') {
          rectb = parseInt(rect.b);
        }
        else {
          rectb = 0;
        }
        var _pos = {
          left: rect.l,
          right: rect.r,
          top: rect.t,
          bottom: rect.b
        };
        _pos = $.extend(_pos, position);
        var css = t.attr('style') + ';';
        css += 'position:absolute;bottom:auto;right:auto;clear:both;';
        if (rect.l != 'auto' && rect.r != 'auto')
          css += 'width:expression(eval(document.compatMode && document.compatMode==\'CSS1Compat\') ? documentElement.clientWidth - ' + rectl + ' - ' + rectr + ' : document.body.clientWidth - ' + rectl + ' - ' + rectr + ' );';
        if (rect.l == 'auto' && rect.r != 'auto')
          css += 'left:expression(eval(document.compatMode && document.compatMode==\'CSS1Compat\') ? documentElement.scrollLeft + (documentElement.clientWidth-this.clientWidth - ' + rectr + ') : document.body.scrollLeft +(document.body.clientWidth-this.clientWidth - ' + rectr + '));';
        else
          css += 'left:expression(eval(document.compatMode && document.compatMode==\'CSS1Compat\') ? documentElement.scrollLeft + ' + rectl + ' : document.body.scrollLeft + ' + rectl + ');';
        if (rect.t == 'auto' && rect.b != 'auto')
          css += 'top:expression(eval(document.compatMode && document.compatMode==\'CSS1Compat\') ? documentElement.scrollTop + (documentElement.clientHeight-this.clientHeight - ' + rectb + ') : document.body.scrollTop +(document.body.clientHeight-this.clientHeight - ' + rectb + '));';
        else
          css += 'top:expression(eval(document.compatMode && document.compatMode==\'CSS1Compat\') ? documentElement.scrollTop + ' + rectt + ' : document.body.scrollTop + ' + rectt + ');';
        t.attr('style', css);
      });
    }
  });
})(jQuery);

그 다음 에 다음 과 같은 핵심 스 크 립 트 가 이 페이지 가 실현 하 는 관건 입 니 다.

<script type="text/javascript">
  $("#scrollspy").toFixed();// scrollspy  div IE6    position:fixed;
  //       ,    
  var title_counter=0;
  $(".title").each(function(){
    title_counter++;
    //     class title       ,   #scrollspy           
    $(this).attr("id","title"+title_counter);
    $("#scrollspy").append("<p><a href='#title"+title_counter+"'>。。。"+$(this).html()+"</a></p>");
    //     <div> <p>   ,   <ul> <li>,<ul> <li>  position:fixed;  。            。
  });
  //            ,               
  $(window).scroll(function() {
    var height_now=$(window).scrollTop();//           
    title_counter=0;
    var title_now=0;//         
    $(".title").each(function(){
      $("#scrollspy>p:eq("+title_counter+")>a").html("。。。"+$(this).html());//              。。。
      if(height_now>$(this).offset().top){
        title_now++;//$(this).offset().top           ,                   
      }
      title_counter++;
    });
    $("#debug").html("    :"+height_now+"px,   :"+title_counter+",     :"+title_now);//                ,    
    if(title_now>title_counter-1){//                ,              
      title_now=title_counter-1;
    }
    $("#scrollspy>p:eq("+title_now+")>a").html("》》》"+$(".title:eq("+title_now+")").html());//                      。。。  》》》
  });
</script>

jQuery 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 jQuery 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기