赞
踩
为了实现点击侧边栏中一项,改变当前选中项的背景图片效果。原本使用循环遍历清除样式再单独添加样式可以实现,但是总感觉会有更简洁的方式实现。今天找到了方法,故而小小记录一下。
<ul>
<li class="siderBarItem"
v-for="item in sideBarItems"
:key="item.value"
:value="item.value" @click="goToProductOption(item.value)"
>
<span>{{item.label}}</span>
</li>
</ul>
其中 unSelectedBgi 、selectedBgi
已经通过import方式引入当前vue组件中。
原来是通过获取到所有的li元素,循环遍历。先将所有li的背景图片修改为未选中的,然后设置当前选中的背景图片。感觉有些繁琐。代码也不简洁
代码如下(示例):
goToProductOption(itemVal){ // 滚动到某个元素 document.getElementById(itemVal).scrollIntoView({ block: 'start', behavior: 'smooth' }) // 设置背景图片 let items = document.getElementsByClassName('siderBarItem') // 将所有li的背景图片修改为未选中的 Array.from(items).forEach(item => { item.style.background = `url(${unSelectedBgi})` }) // 修改当前选中的背景图片 Array.from(items).forEach(item => { if(item.attributes['value'].value === itemVal){ item.style.background = `url(${selectedBgi})` } }) },
selectedItemVal: '0', // 侧边栏选中值,默认是第一个
在li中新增以下代码段:
:class="{selectedPic: selectedItemVal === item.value}"
绑定selectedPic类。当选中的值与当前li的值一致时,为当前的li新增selectedPic类
关键代码:this.selectedItemVal = itemVal
goToProductOption(itemVal){
// 滚动到某个元素
document.getElementById(itemVal).scrollIntoView({
block: 'start',
behavior: 'smooth'
})
// 设置背景图片
this.selectedItemVal = itemVal
},
/* li的默认样式,未选中状态 */
.siderBarItem{
font-size: 15px;
color: #7e7f7f;
padding-left: 35px;
height: 50px;
line-height: 50px;
background: url('../../assets/images/left_nav_bg.png');
}
/*选中的样式*/
.selectedPic{
background: url('../../assets/images/left_nav_bg_pre.png');
}
这样就可以实现同样的效果啦,代码还简洁不少
主要用到的知识点是:class的动态绑定和根据索引或者唯一值来判断是否为当前元素添加class属性
最后附上官方讲解地址:
Class与style绑定:https://cn.vuejs.org/v2/guide/class-and-style.html
如果也遇到同样的问题,希望这篇文章给你一些灵感。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。