仿京东的楼梯选项卡

http://download.csdn.net/download/qq_33769914/9970445看代码到这里

点击某个选项卡页面就下滑到那个部分。当下拉到那个部分,导航也默认的选中那个导航。

需要考虑点击时和滚动条滚动,两个状态,但是注意你点击选项卡后页面就滚动了,那么他也触发了滚动事件。所有会执行这两个鼠标事件。一定不能冲突。否则你可能会出错。


一般网上的楼梯写法都是知道每个部分的高度的在css里面已经自己定义了,所以就很适用。但是如果我们是没有设置高度,也获取不到高度怎么办呢?那种写法就不管用了。。

这是右侧导航。

<div class="nav">
  <span  class="floor_item active"><img src="img/nav1.png"/></span>
  <span  class="floor_item"><img src="img/nav2.png"/></span>
  <span  class="floor_item"><img src="img/nav3.png"/></span>
  <span  class="floor_item"><img src="img/nav4.png"/></span>
  <span class="floor_item"><img src="img/nav5.png"/></span>
</div>


这是对应的一个个导航的内容

<div class="section">
 <div id="section1" class="part">内容1</div>

                        <div id="section2" class="part">内容2</div>

                        <div id="section3" class="part">内容3</div>

                       <div id="section4" class="part">内容4</div>

                       <div id="section5" class="part">内容5</div>

</div>



对于点中就跳到相应的部分,你可以选择用锚地来

<a href="#section1">第一个部分</a>

<div id="section1">我是第一个部分的具体内容</div>

点击那个a自动的页面就调到了id为section1的地方。

或者是


写一个函数,确定那个a对应部分距离顶部的距离。$("#section1").offset().top;

//点击导航页面滚动到对应的那个part的地方
$('.nav > .floor_item').click(function(){
if($(this).index() >= 0 && $(this).index() < 5){
var i = $(this).index() ;
var floorT = $('.part').eq(i).offset().top;
$('html,body').animate({
scrollTop:floorT + 'px'
},200);
}
});




滚动条滚动的时候

$(document).scroll(function(){
//固定导航大于600就固定
if($(this).scrollTop()>600){
$(".sheet3 .right").css({"position":"fixed","z-index":"2"})
}
else{$(".sheet3 .right").css({"position":"absolute"})}

$('.part').each(function(i){ //在这里each的时候获取到,你如果在外面each得到这个floorArr数组,在这个里面循环,可能就有点问题,现在我也不知道为什么。
var floorT = $('.part').eq(i).offset().top;  //每个part对应的距离顶端的距离
var scrollT = $(document).scrollTop();
var wHeight = $(window).height();
if(scrollT>floorT -wHeight/2){
$('.floor_item').eq(i).addClass('active').siblings().removeClass('active');
}
});
});


不知道你注意到没有,我在点击的时候只让他滚动到指定的地方。并没有说给点中的加一个active。因为点击滚动后执行了滚动事件,在这个事件里面加的active的事件。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的HTML仿京东选项卡切换代码: ```html <!DOCTYPE html> <html> <head> <title>选项卡切换</title> <meta charset="utf-8"> <style type="text/css"> .tab-content { display: none; } .tab-content.active { display: block; } .tab-nav li { display: inline-block; padding: 10px; border: 1px solid #ccc; cursor: pointer; } .tab-nav li.active { border-bottom: none; } </style> </head> <body> <div class="tab"> <ul class="tab-nav"> <li class="active">选项卡1</li> <li>选项卡2</li> <li>选项卡3</li> </ul> <div class="tab-content active"> <p>选项卡1内容</p> </div> <div class="tab-content"> <p>选项卡2内容</p> </div> <div class="tab-content"> <p>选项卡3内容</p> </div> </div> <script type="text/javascript"> var tabNav = document.querySelectorAll('.tab-nav li'); var tabContent = document.querySelectorAll('.tab-content'); for (var i = 0; i < tabNav.length; i++) { tabNav[i].addEventListener('click', function() { var currentTab = this.dataset.tab; for (var j = 0; j < tabNav.length; j++) { tabNav[j].classList.remove('active'); } for (var j = 0; j < tabContent.length; j++) { tabContent[j].classList.remove('active'); } this.classList.add('active'); document.querySelector('.tab-content[data-tab="' + currentTab + '"]').classList.add('active'); }); } </script> </body> </html> ``` 以上代码使用了纯CSS来隐藏和显示选项卡内容,使用了JavaScript来切换选项卡。每个选项卡都有一个`data-tab`属性来指定它对应的选项卡内容。 以下是一个简单的JavaScript仿京东轮播效果: ```html <!DOCTYPE html> <html> <head> <title>轮播效果</title> <meta charset="utf-8"> <style type="text/css"> .carousel { position: relative; overflow: hidden; width: 500px; height: 300px; } .carousel .slides { position: absolute; top: 0; left: 0; width: 500%; height: 100%; display: flex; animation: slide 10s infinite; } .carousel .slides .slide { flex: 1; height: 100%; background-size: cover; } @keyframes slide { 0% { transform: translateX(0); } 20% { transform: translateX(0); } 25% { transform: translateX(-100%); } 45% { transform: translateX(-100%); } 50% { transform: translateX(-200%); } 70% { transform: translateX(-200%); } 75% { transform: translateX(-300%); } 95% { transform: translateX(-300%); } 100% { transform: translateX(-400%); } } </style> </head> <body> <div class="carousel"> <div class="slides"> <div class="slide" style="background-image: url('image1.jpg');"></div> <div class="slide" style="background-image: url('image2.jpg');"></div> <div class="slide" style="background-image: url('image3.jpg');"></div> <div class="slide" style="background-image: url('image4.jpg');"></div> <div class="slide" style="background-image: url('image5.jpg');"></div> </div> </div> </body> </html> ``` 以上代码使用了CSS3动画来实现轮播效果。`.carousel`元素是一个具有相对定位和溢出隐藏的容器,`.slides`元素是一个具有绝对定位和`flex`布局的容器,其中每个`.slide`元素都占据`.slides`的一个等分部分,背景图片使用了`background-image`属性。 在`@keyframes`规则中,我们定义了一个名为`slide`的动画,将`.slides`元素向左平移,每个图片占据一个完整的`.slides`宽度。`animation`属性将动画应用到`.slides`元素上,并将其无限循环播放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值