今天遇到个需求:我这里借用小米商城的详情页做个比喻吧。
刚开始其商品详情页是这样的:
当滚动到一定高度时,是这样的:
可以看到当滚动到轮播图底下的时候,详情页的菜单完全显现出来。
以下上代码:
HTML:
<div class="detail-header">
<div class="left operate" :style="{'background-color':iconStyle.BackgroundColor,'color':iconStyle.color}">
<span class="iconfont icon-fanhui"></span>
</div>
<div class="active-box" :style="{'opacity':Opacity}">
<div>商品</div>
<div>评价</div>
<div>评价</div>
<div>详情</div>
<div>推荐</div>
</div>
<div class="right operate" :style="{'background-color':iconStyle.BackgroundColor,'color':iconStyle.color}">
<span class="iconfont icon-home"></span>
</div>
<div class="header-bg" :style="{'opacity':Opacity}"></div>
</div>
css:
.detail-header{
position: absolute;
left: 0;
right: 0;
height: 1.173333rem;
z-index: 999;
.active-box{
position: absolute;
left: 50%;
transform: translateX(-50%);
white-space: nowrap;
display: flex;
align-items: center;
justify-content: center;
line-height: 1.173333rem;
font-size: 0.426667rem;
opacity:0;
z-index:67;
>div{
padding: 0 0.4rem;
}
}
.operate{
position: absolute;
width: 0.906667rem;
height: 0.906667rem;
line-height: 0.906667rem;
border-radius: 50%;
background-color: rgba(0,0,0,.3);
color: #fff;
text-align: center;
margin: 0.133333rem;
display: table;
z-index: 58;
.iconfont{
display: table-cell;
font-size: 0.4rem;
vertical-align: middle;
}
}
.left{
left:0;
}
.right{
right: 0;
}
.header-bg{
background-color: #fff;
height: 100%;
opacity: 0;
z-index: 66;
}
}
js:
data(){
return{
Opacity:0,
iconStyle:{
BackgroundColor:'rgba(0, 0, 0, 0.3)',
color:'#fff'
}
}
},
ContentScroll(e){
let top = (e.target.scrollTop / 120);
this.Opacity = top >= 1?1:top;
console.log(top)
if(top >= 1){
this.iconStyle.BackgroundColor = 'unset'
this.iconStyle.color = '#333'
}else{
this.iconStyle.BackgroundColor = 'rgba(0, 0, 0, 0.3)'
this.iconStyle.color = '#fff'
}
}
在上面代码中可以看出,头部代码是绝对定位的,头部不要设置背景图,因为我么是通过设置opacity来控制元素的显示隐藏的,所以我们用元素来代替背景的作用。只要设置好图层z-index就不会发生:操作菜单和按钮被遮挡的情况。记住要设置定位哦!
这里的e.target.scrollTop / 120 ;120是你轮播图的高度,根据自己的情况而定。