html 带渐变的吸顶效果 vue
1 <template> 2 <div id="main" class="main" v-on:scroll.passive="handleScroll"> 3 <div class="top"> 4 <span v-if="!isFixed" class="iconfont iconarrowleft-fill icon-back" @click="goBack"></span> 5 <van-image width="100%" height="220" src="/src/assets/imgs/rachel.jpg" /> 6 </div> 7 8 <!-- title start --> 9 <div id="title-fixed" v-if="isFixed" class="title-fixed"> 10 <span v-if="isFixed" class="iconfont iconarrowleft-fill icon-back-fixed" :style="{'opacity': opacity}" @click="goBack"></span> 11 <span :style="{'opacity': opacity}"> 12 Omnibus Law Introduces Special Tax Rules in Relation to the Sovereign Wealth Fund 13 </span> 14 </div> 15 <div id="title-org" class="title"> 16 Omnibus Law Introduces Special Tax Rules in Relation to the Sovereign Wealth Fund 17 </div> 18 <!-- title end --> 19 20 <div class="cont"> 21 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 22 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 23 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 24 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 25 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 26 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 27 28 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 29 30 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 31 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 32 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 33 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 34 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 35 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 36 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 37 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 38 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 39 The favourite in a race or contest is the competitor that is expected to win. In a team game, the team that is expected to win is referred to as the favourites . 40 end...end....end....end.... 41 </div> 42 <div class="foot"> 43 <div class="fav"> 44 <span class="iconfont iconrating-outline icon-fav" @click="goBack"></span> 45 <span>Favourite</span> 46 </div> 47 48 <div class="share"> 49 <span class="iconfont iconshare-outline icon-share" @click="goBack"></span> 50 51 <span>Share</span> 52 53 </div> 54 </div> 55 </div> 56 </template> 57 58 <script> 59 export default { 60 data() { 61 return { 62 isFixed: false, 64 opacity: 0, 65 }; 66 }, 67 68 components: {}, 69 70 computed: {}, 71 72 mounted() { 73 74 }, 75 76 methods: { 77 handleScroll() { 78 let scrollTop = document.getElementById("main").scrollTop; 79 80 let title = document.getElementById("title-org"); 81 //获取标题元素高度 82 let titleHeight = title.offsetHeight; 83 //获取标题距离页面偏移高度 84 let ofTop = title.offsetTop; 85 console.log("scrollTop:" + scrollTop, "ofTop: " + ofTop); 86 //去掉固定top 的高度,用于滚动实际计算 87 let calcH = ofTop - 54; 88 let opc = 0; 89 //滚动高度大于实际计算的偏移高度之后,需要开始显示固定bar 90 if (scrollTop >= calcH) { 91 //继续滚动的时候,计算超出实际计算的高度,并计算占有实际 title 高度的百分比 92 opc = ((scrollTop - calcH) * 1.0) / titleHeight; 93 console.log(opc, "%"); 94 this.opacity = opc; 95 } 96 //百分比小于0之后,表明需要隐藏 固定bar 97 if (opc <= 0) { 98 this.isFixed = false; 99 } else { 100 //有透明度,表示需要显示 固定bar 101 this.isFixed = true; 102 } 103 }, 104 goBack() { 105 this.$router.go(-1); 106 }, 107 titleScroll(e) { 108 console.log(e); 109 }, 110 }, 111 }; 112 </script> 113 <style lang='less' scoped> 114 .main { 115 overflow: auto; 116 height: calc(100% - 60px); 117 } 118 .icon-back { 119 display: inline-block; 120 // width: 20px; 121 // height: 20px; 122 position: absolute; 123 left: 20px; 124 top: 23px; 125 color: white; 126 z-index: 999; 127 font-size: 30px; 128 } 129 .icon-back-fixed { 130 display: inline-block; 131 // width: 20px; 132 // height: 20px; 133 position: absolute; 134 left: 14px; 135 top: 13px; 136 color: #101010; 137 z-index: 999; 138 font-size: 30px; 139 } 140 .title { 141 width: 330px; 142 margin: 15px auto; 143 font-size: 24px; 144 font-weight: 450; 145 color: #101010; 146 padding: 0px 20px; 147 } 148 .title-fixed { 149 position: absolute; 150 top: 0; 151 color: #7e7e7e; 152 background-color: white; 153 font-size: 14px; 154 margin: 0 auto; 155 width: calc(100% - 60px); 156 padding: 10px 10px 0px 50px; 157 height: 54px; 158 } 159 .cont { 160 padding: 0 18px; 161 font-size: 14px; 162 line-height: 22px; 163 word-break: break-word; 164 } 165 .foot { 166 position: absolute; 167 bottom: 0; 168 display: flex; 169 text-align: center; 170 width: 100%; 171 // line-height: 74px; 172 padding: 20px 0; 173 border-top: 1px solid #f2f2f2; 174 color: #7e7e7e; 175 background-color: white; 176 .fav { 177 flex: 1; 178 } 179 .share { 180 flex: 1; 181 border-left: 1px solid #dedede; 182 } 183 } 184 </style>