当前位置:   article > 正文

Vue 点击li动态改变元素样式_vue ul li 选中样式

vue ul li 选中样式

一、问题描述

为了实现点击侧边栏中一项,改变当前选中项的背景图片效果。原本使用循环遍历清除样式再单独添加样式可以实现,但是总感觉会有更简洁的方式实现。今天找到了方法,故而小小记录一下。

template内容

<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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

二、原来方法

其中 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})`
    }
  })
},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

新方法

1.data中定义变量

selectedItemVal: '0', // 侧边栏选中值,默认是第一个
  • 1

2. v-bind 与class 动态绑定

在li中新增以下代码段:

:class="{selectedPic: selectedItemVal === item.value}"
  • 1

绑定selectedPic类。当选中的值与当前li的值一致时,为当前的li新增selectedPic类

3. 修改点击事件的代码

关键代码:this.selectedItemVal = itemVal

goToProductOption(itemVal){
  // 滚动到某个元素
  document.getElementById(itemVal).scrollIntoView({
    block: 'start',
    behavior: 'smooth'
  })
  // 设置背景图片
  this.selectedItemVal = itemVal
},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

4. 定义selectedPic的样式

/* 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');
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

这样就可以实现同样的效果啦,代码还简洁不少

总结

主要用到的知识点是:class的动态绑定和根据索引或者唯一值来判断是否为当前元素添加class属性

链接

最后附上官方讲解地址:
Class与style绑定:https://cn.vuejs.org/v2/guide/class-and-style.html

如果也遇到同样的问题,希望这篇文章给你一些灵感。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/328643
推荐阅读
相关标签
  

闽ICP备14008679号