在一个有顶部导航栏的网站首页,上下分成好几个不同内容的展示区,要求能通过侧边的锚点按钮快速定位,并且锚点按钮是一个图标按钮,鼠标悬浮时图标会转为文字提示(如CSDN这种)。
Vue2、Element UI
以CSDN锚点按钮为实现目标,可以用 element-ui 的圆角图标配合 el-icon做基础按钮,再添加悬浮事件扩展特效,而锚点跳转可以通过dom元素定位来实现。
准备工作:
#top
、#goods
、#discount
、#present
实现流程:
<div class="anchor-tool">
<el-button icon="el-icon-top" circle>el-button>
<el-button icon="el-icon-goods" circle>el-button>
<el-button icon="el-icon-discount" circle>el-button>
<el-button icon="el-icon-present" circle>el-button>
div>
.anchor-tool {
position: fixed;
padding-left: 16px;
z-index: 2;
bottom: 10vh;
}
.anchor-tool {
position: fixed;
padding-left: 16px;
z-index: 2;
bottom: 10vh;
> * {
display: block;
margin: 0 !important;
margin-bottom: 8px !important;
}
}
<el-button @click="goAnchor(target)" icon="el-icon-goods" circle>el-button>
goAnchor方法,传入跳转目标dom元素的id,并控制滑动条滑相应位置
goAnchor(id) {
document.querySelector(id).scrollIntoView({
behavior: 'smooth',
});
},
<div v-for="(item,idx) in anchorBtns" :key="idx" @mouseenter="onAnchorBtn(item)" @mouseleave="leaveAnchorBtn(item)">
<el-button @click="goAnchor(item.target)" v-html="item.content" circle>el-button>
div>
锚点按钮改为数据驱动的动态渲染
export default {
//...
data() {
//...
anchorBtns: [
{ target: '#top', content: ' ', hint: '顶' },
{ target: '#goods', content: ' ', hint: '商' },
{ target: '#discount', content: ' ', hint: '抢' },
{ target: '#present', content: ' ', hint: '租' }
]
}
}
@mouseenter触发的方法,交换提示内容和图标内容,让鼠标悬浮按钮时渲染文字提示(switchAnchorContent是一个交换item的hint和content的函数,就不摆出来了)
onAnchorBtn(item) {
//switchAnchorContent是一个交换item的hint和content的函数,就不摆出来了
this.switchAnchorContent(item);
},
@mouseleave触发的方法,鼠标离去时把内容再换回来,恢复图标
leaveAnchorBtn(item) {
this.switchAnchorContent(item);
}
.anchor-tool {
position: fixed;
padding-left: 16px;
z-index: 2;
bottom: 10vh;
> * {
display: block;
margin: 0 !important;
margin-bottom: 8px !important;
> * {
/**规定el-icon和div字体一样大,防止按钮切换内容时因规格不一致而变形 */
font-size: 1rem !important;
}
}
}