45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:jquery如何实现仿百度百科的底部浮动导航特效?

jquery如何实现仿百度百科的底部浮动导航特效?

2015-08-31 14:40:12 来源:www.45fan.com 【

jquery如何实现仿百度百科的底部浮动导航特效?

jquery类似百度百科底部导航预览,代码很简单,这里就不多废话了。

效果图:

jquery如何实现仿百度百科的底部浮动导航特效?

CSS

 * {
   margin: 0;
   padding: 0
  }

  .wrap {
   width: 1000px;
   overflow: hidden;
   margin: 0 auto;
  }

  .content {
   width: 780px;
   float: left;
  }

  .slide {
   width: 200px;
   float: right;
  }

HTML

<div class="wrap">
<div class="content">
 <h2 class="headline-1">
  <a class="anchor-1" name="1"></a>
  <span class="headline-1-index">1</span>
  <span class="headline-content">part1</span>
 </h2>

 <div class="para">
  content1,content1
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="2"></a>
  <span class="headline-2-index">2</span>
  <span class="headline-content">part2</span>
 </h2>

 <div class="para">
  content2,content2
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-2">
  <a class="anchor-2" name="2-1"></a>
  <!--<span class="headline-2-index">2-1</span>-->
  <span class="headline-content">part2-1</span>
 </h2>

 <div class="para">
  content2-1,content2-1
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-2">
  <a class="anchor-2" name="2-2"></a>
  <!--<span class="headline-1-index">2-2</span>-->
  <span class="headline-content">part2-2</span>
 </h2>

 <div class="para">
  content2-2,content2-2
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="3"></a>
  <span class="headline-1-index">3</span>
  <span class="headline-content">part3</span>
 </h2>

 <div class="para3">
  content,content
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="4"></a>
  <span class="headline-1-index">4</span>
  <span class="headline-content">part4</span>
 </h2>

 <div class="para4">
  content,content
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="5"></a>
  <span class="headline-1-index">5</span>
  <span class="headline-content">part5</span>
 </h2>

 <div class="para">
  content5,content5
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="6"></a>
  <span class="headline-1-index">6</span>
  <span class="headline-content">part6</span>
 </h2>

 <div class="para">
  content6,content6
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="7"></a>
  <span class="headline-1-index">7</span>
  <span class="headline-content">part7</span>
 </h2>

 <div class="para">
  content7,content7
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="8"></a>
  <span class="headline-1-index">8</span>
  <span class="headline-content">part8</span>
 </h2>

 <div class="para">
  content8,content8
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="9"></a>
  <span class="headline-1-index">9</span>
  <span class="headline-content">part9</span>
 </h2>

 <div class="para">
  content9,content9
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="10"></a>
  <span class="headline-1-index">10</span>
  <span class="headline-content">part10</span>
 </h2>

 <div class="para">
  content10,content10
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="11"></a>
  <span class="headline-1-index">11</span>
  <span class="headline-content">part11</span>
 </h2>

 <div class="para">
  content11,content11
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="12"></a>
  <span class="headline-1-index">12</span>
  <span class="headline-content">part12</span>
 </h2>

 <div class="para">
  content12,content12
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="13"></a>
  <span class="headline-1-index">13</span>
  <span class="headline-content">part13</span>
 </h2>

 <div class="para">
  content13,content13
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="14"></a>
  <span class="headline-1-index">14</span>
  <span class="headline-content">part14</span>
 </h2>

 <div class="para">
  content14,content14
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 </div>
 <h2 class="headline-1">
  <a class="anchor-1" name="15"></a>
  <span class="headline-1-index">15</span>
  <span class="headline-content">part15</span>
 </h2>

 <div class="para">
  content15,content15
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
  bottom
 </div>
</div>
<div class="slide" style="">
 <div id="sideToolbar" style="position: fixed; bottom: 0">
  <div id="sideCatalog" class="sideCatalogBg" style="visibility: visible;">
   <div id="sideCatalog-sidebar">
    <div class="sideCatalog-sidebar-top"></div>
    <div class="sideCatalog-sidebar-bottom"></div>
   </div>
   <div id="sideCatalog-updown" style="visibility: visible;">
    <div id="sideCatalog-up" class="sideCatalog-up-disable" title="向上翻页"></div>
    <div id="sideCatalog-down" class="sideCatalog-down-enable" title="向下翻页"></div>
   </div>
   <div id="sideCatalog-catalog">
    <dl style="width:175px;zoom:1">
     <!--
     <dd id="sideToolbar-item-0-1" class="sideCatalog-item2 heightlight">
      <span class="sideCatalog-index1">1</span>
      <a class="nslog:1026" onclick="return false;" title="part1" href="#1">part1</a>
      <span class="sideCatalog-dot"></span>
     </dd>
     <dd id="sideToolbar-item-0-2" class="sideCatalog-item1">
      <span class="sideCatalog-index1">2</span>
      <a class="nslog:1026" onclick="return false;" title="part2" href="#2">part2</a>
      <span class="sideCatalog-dot"></span>
     </dd>
     <dd id="sideToolbar-item-0-2-1" class="sideCatalog-item2">
      <span class="sideCatalog-index1">2-1</span>
      <a class="nslog:1026" onclick="return false;" title="part2" href="#2-1">part2-1</a>
      <span class="sideCatalog-dot"></span>
     </dd>
     -->
    </dl>
   </div>
  </div>
  <a id="sideCatalogBtn" class="" style="visibility: visible;" href="javascript:void(0);"></a>
  <a id="sideToolbar-up" style="visibility: visible;" title="返回顶部" href="javascript:void(0)"></a>
 </div>
</div>
</div>

JS

<script>
 var allEle = $(':header[class*="headline"]');
 var headLen = allEle.length;
 var ddArr = [];
 //根据页面内容生成slide导航;
 allEle.each(function(i){
  var sideIndex,
   sideName,
   ddId,
   highlight='',
   ddClass,
   sideAnchor;
  sideName = $(this).find('.headline-content').text();
  if($(this).hasClass('headline-1')){
   sideAnchor = sideIndex = $(this).find('.anchor-1').eq(0).attr('name');
   ddClass = 'sideCatalog-item1';
  }else{
   sideAnchor = $(this).find('.anchor-2').eq(0).attr('name');
   sideIndex = sideAnchor.replace('-','.');
   ddClass = 'sideCatalog-item2';
  }
  ddId = 'sideToolbar-item-0-'+ sideAnchor;
  if(i==0){
   highlight = 'highlight';
  }
  var ddHtml = '<dd id="'+ ddId +'" class="'+ddClass + ' ' + highlight +'">'
    +  '<span class="sideCatalog-index1">'+ sideIndex +'</span>'
    +  '<a class="nslog:1026" onclick="return false;" title="part'+sideAnchor+'" href="#'+sideAnchor+'">'+ sideName +'</a>'
    +  '<span class="sideCatalog-dot"></span>'
    + '</dd>';
  ddArr.push(ddHtml);
 });
 $('#sideCatalog-catalog dl').html(ddArr.join(''));

 //设置导航的位置
 var slideTop = $(window).height() - $('.slide').height();
 $('.slide').css('top',slideTop);

 var slideInnerHeight = $('#sideCatalog-catalog dl').height();
 var slideOutHeight = $('#sideCatalog-catalog').height();
 var enableTop = slideInnerHeight - slideOutHeight;
 var step = 50;
 //点击向上的按钮
 $('#sideCatalog-down').bind('click', function () {
  if ($(this).hasClass('sideCatalog-down-enable')) {
   if ((enableTop - Math.abs(parseInt($('#sideCatalog-catalog dl').css('top')))) > step) {
    $('#sideCatalog-catalog dl').stop().animate({'top': '-=' + step}, 'fast');
    $('#sideCatalog-up').removeClass('sideCatalog-up-disable').addClass('sideCatalog-up-enable');
   } else {
    $('#sideCatalog-catalog dl').stop().animate({'top': -enableTop}, 'fast');
    $(this).removeClass('sideCatalog-down-enable').addClass('sideCatalog-down-disable');
   }
  } else {
   return false;
  }
 })
 //点击向下的按钮
 $('#sideCatalog-up').bind('click', function () {
  if ($(this).hasClass('sideCatalog-up-enable')) {
   if (Math.abs(parseInt($('#sideCatalog-catalog dl').css('top'))) > step) {
    $('#sideCatalog-catalog dl').stop().animate({'top': '+=' + step}, 'fast');
    $('#sideCatalog-down').removeClass('sideCatalog-down-disable').addClass('sideCatalog-down-enable');
   } else {
    $('#sideCatalog-catalog dl').stop().animate({'top': '0'}, 'fast');
    $(this).removeClass('sideCatalog-up-enable').addClass('sideCatalog-up-disable');
   }
  } else {
   return false;
  }
 })

 //点击导航中的各个目录
 $('#sideCatalog-catalog dl').delegate('dd', 'click', function () {
  var index = $('#sideCatalog-catalog dl dd').index($(this));
  scrollSlide($(this), index);
  var ddIndex = $(this).find('a').stop().attr('href').lastIndexOf('#');
  var ddId = $(this).find('a').stop().attr('href').substring(ddIndex+1);
  var windowTop = $('a[name="' + ddId + '"]').offset().top;
  $('body,html').animate({scrollTop: windowTop}, 'fast');
 })

 //滚动页面,即滚动条滚动
 $(window).scroll(function () {
  if($(this).scrollTop()>$(this).height()){
   $('.slide').show();
  }else{
   $('.slide').hide();
  }
  for (var i=headLen-1; i>=0; i--) {
   if ($(this).scrollTop() >=allEle.eq(i).offset().top - allEle.eq(i).height()) {
    var index = i;
    $('#sideCatalog-catalog dl dd').eq(index).addClass('highlight').siblings('dd').removeClass('highlight');
    scrollSlide($('#sideCatalog-catalog dl dd').eq(index), index);
    return false;
   } else {
    $('#sideCatalog-catalog dl dd').eq(0).addClass('highlight').siblings('dd').removeClass('highlight');
   }
  }
 })

 //导航的滚动,以及向上,向下按钮的显示隐藏
 function scrollSlide(that, index){
  if (index < 5) {
   $('#sideCatalog-catalog dl').stop().animate({'top': '0'}, 'fast');
   $('#sideCatalog-down').removeClass('sideCatalog-down-disable').addClass('sideCatalog-down-enable');
   $('#sideCatalog-up').removeClass('sideCatalog-up-enable').addClass('sideCatalog-up-disable');
  } else if (index > 11) {
   $('#sideCatalog-catalog dl').stop().animate({'top': -enableTop}, 'fast');
   $('#sideCatalog-down').removeClass('sideCatalog-down-enable').addClass('sideCatalog-down-disable');
   $('#sideCatalog-up').removeClass('sideCatalog-up-disable').addClass('sideCatalog-up-enable');
  } else {
   var dlTop = parseInt($('#sideCatalog-catalog dl').css('top')) + slideOutHeight / 2 - (that.offset().top - $('#sideCatalog-catalog').offset().top);
   $('#sideCatalog-catalog dl').stop().animate({'top': dlTop}, 'fast');
   $('#sideCatalog-down').removeClass('sideCatalog-down-disable').addClass('sideCatalog-down-enable');
   $('#sideCatalog-up').removeClass('sideCatalog-up-disable').addClass('sideCatalog-up-enable');
  }
 }

 //置顶
 $('#sideToolbar-up').bind('click', function(){
  $('body,html').animate({scrollTop: 0}, 'fast');
 })

 //slide内容的显示与隐藏
 $('#sideCatalogBtn').bind('click', function(){
  if($(this).hasClass('sideCatalogBtnDisable')){
   $(this).removeClass('sideCatalogBtnDisable');
   $('#sideCatalog').css('visibility','visible');
  }else{
   $(this).addClass('sideCatalogBtnDisable');
   $('#sideCatalog').css('visibility','hidden');
  }
 })

</script>

本文地址:http://www.45fan.com/bcdm/19498.html
Tags: jquery 百度 百科
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部