vue.js 实现点击div标签时改变样式

目录
  • 1.点击某一项后样式发生改变(循环列表的每一项的样式改变)
  • 2.切换样式应该是v-bind很常用的功能(单标签样式的改变)
  • 3.实现联动(完整代码)

1.点击某一项后样式发生改变(循环列表的每一项的样式改变)

效果图

v-for循环展示productType中的数据

:class动态绑定样式表中.changeStyle的样式,将当前索引传递给changeSelectStyle

@click点击事件触发函数changeStyle(),并将当前索引传递进去。

<ul v-for="(item,index) in productType" :key="index">
   <li  class="type-name" :class="{changeStyle:changeSelectStyle == index}"
                         @click="changeStyle(index)" >{{item.name}}</li>
</ul>
 data(){
    return{
      changeSelectStyle:'',
      productType:[
        {"name":"APE1"},
        {"name":"APE2"},
        {"name":"APE3"},
        {"name":"APE4"},
      ]
  }
}

样式表:

.type-name
    height 38px
    text-align center
    line-height 38px
.changeStyle
    color #0099cc
    background-color #fff

changeStyle方法:

让changeSelectStyle的值为当前索引的值

    changeStyle:function(index){
      this.changeSelectStyle = index;
    },

2.切换样式应该是v-bind很常用的功能(单标签样式的改变)

 <div class="selectAll" :class="{selectAll: !isshow,changeSelectAll: isshow}" @click="isshow=!isshow">
          <div class="text-header">全部</div>
          <div class="sel-icon"></div>
</div>
 data(){
    return{
      isshow: true
}

点击后改变文字颜色和图标

.selectAll
    flex 0 0 37px
    display flex
  .text-header
    padding-left 23px
    flex 0 0 240px
    border-left 1px solid #0099cc
    border-bottom 1px solid #f7f7f7
    letter-spacing 2px
    line-height 37px
  .sel-icon
    flex 1
    bg-image('../images/select-icon2')
    background-repeat no-repeat
    background-size 16px 16px
    width 16px
    height 16px
    align-self center
.changeSelectAll
    color #0099cc
   .sel-icon
    bg-image('../images/select-icon1')

原图及点击后效果

3.实现联动(完整代码)

效果如下:

默认状态,循环列表的每一项都没有被选中。    选中后其中某一项 全部取消,  选中全部,其他项取消选中。

html部分

<template>
 <div class="fliter-container">
   <div class="top">
     <span class="back-icon" @click="back()"/>
     <p class="title">产品筛选</p>
   </div>
   <div class="content">
      <div class="left">
        <ul v-for="(item,index) in productType" :key="index">
          <li  class="type-name" :class="{changeStyle:changeSelectStyle == index}" @click="changeStyle(index)" >{{item.name}}</li>
        </ul>
      </div>
      <div class="right">
        <div class="selectAll" :class="{selectAll: !isshow,changeSelectAll: isshow}" @click="isshow=!isshow">
          <div class="text-header">全部</div>
          <div class="sel-icon"></div>
        </div>
        <div class="select-detail" >
            <div class="selectItem" v-for="(item,index) in nameoptions" :key="index" :class="{changeSelectItem:changeSelectIndex == index&&!isshow}" @click="changeItem(index)" >
              <div class="text">{{item.name}}</div>
              <div class="sel-icon"></div>
            </div>
        </div>
        <div class="bottom">
          <button class="confirm" >确定</button>
        </div>
      </div>
   </div>

 </div>

</template>
<script>
export default {
  data(){
    return{
      isshow: true,
      changeSelectStyle:'',
      changeSelectIndex:'',
      productType:[
        {"name":"APE1"},
        {"name":"APE2"},
        {"name":"APE3"},
        {"name":"APE4"},
      ],
      nameoptions:[
        {"name":"HiLight照明灯车全系列1"},
        {"name":"HiLight照明灯车全系列2"},
        {"name":"HiLight照明灯车全系列3"},
        {"name":"HiLight照明灯车全系列4"},
        {"name":"HiLight照明灯车全系列5"},
        {"name":"HiLight照明灯车全系列6"},
        {"name":"HiLight照明灯车全系列7"},
        {"name":"HiLight照明灯车全系列1"},
        {"name":"HiLight照明灯车全系列1"},
        {"name":"HiLight照明灯车全系列1"},
        {"name":"HiLight照明灯车全系列1"},
        {"name":"HiLight照明灯车全系列1"},
        {"name":"HiLight照明灯车全系列2"},
        {"name":"HiLight照明灯车全系列3"},
        {"name":"HiLight照明灯车全系列4"},
        {"name":"HiLight照明灯车全系列5"},
        {"name":"HiLight照明灯车全系列6"},
        {"name":"HiLight照明灯车全系列7"},
        {"name":"HiLight照明灯车全系列1"},
        {"name":"HiLight照明灯车全系列1"},
        {"name":"HiLight照明灯车全系列1"},
        {"name":"HiLight照明灯车全系列1"},
        ]
    }
  },
  methods:{
    // 改变分类名的样式
    changeStyle:function(index){
      this.changeSelectStyle = index;
    },
    // 改变分类详情样式
    changeItem(index){
      this.isshowItem != this.isshowItem;
      this.isshow = false
      this.changeSelectIndex = index;
    },
    back(){
      this.$router.push({name:"product"})
    }
  }

}
</script>
<style lang="stylus" scoped>
@import '~common/stylus/mixin'
@import '~common/stylus/variable'
  .fliter-container
     width 100%
     height 100%
     display flex
     flex-direction column
     .top
       flex 0 0 40px
       display flex
       background-color #0099cc
       color #fff
       .back-icon
         bg-image('../images/back-icon')
         background-size 19px 15px
         background-repeat no-repeat
         flex 0 0 19px
         margin 13px 0 0 15px
       .title
         flex 1
         align-self center
         margin-left 120px
         letter-spacing 3px
     .content
       flex 1
       display flex
       .left
         font-size 13px
         flex 0 0 78px
         letter-spacing 1px
         background-color #f7f7f7
         .type-name
           height 38px
           text-align center
           line-height 38px
         .changeStyle
           color #0099cc
           background-color #fff
       .right
         flex 1
         overflow hidden
         font-size 13px
         display flex
         flex-direction column
         .selectAll
           flex 0 0 37px
           display flex
           .text-header
             padding-left 23px
             flex 0 0 240px
             border-left 1px solid #0099cc
             border-bottom 1px solid #f7f7f7
             letter-spacing 2px
             line-height 37px
           .sel-icon
             flex 1
             bg-image('../images/select-icon2')
             background-repeat no-repeat
             background-size 16px 16px
             width 16px
             height 16px
             align-self center
          .changeSelectAll
            color #0099cc
            .sel-icon
              bg-image('../images/select-icon1')
         .select-detail
           flex 1
           overflow auto
           .selectItem
             height 37px
             display flex
             .text
              flex 0 0 240px
              margin-left 23px
              letter-spacing 1px
              line-height 37px
              border-bottom 1px solid #f7f7f7
             .sel-icon
              flex 1
              bg-image('../images/select-icon2')
              background-repeat no-repeat
              background-size 16px 16px
              width 16px
              height 16px
              align-self center
           .changeSelectItem
             color #0099cc
             .sel-icon
              bg-image('../images/select-icon1')
         .bottom
            flex 0 0 50px
            width 100%
            display flex
            .confirm
              background-color #0099cc
              width 124px
              height 26px
              color #fff
              letter-spacing 2px
              align-self center
              margin-left 20%
              border none
</style>
 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • js 实现div拖拽拉伸完整示例

    目录 前言 HTML CSS JS 前言 今天和大家分享一下.如何用js实现div拖拽拉伸等功能.功能比较简单,我就不赘述了.直接上代码. HTML <div class="resize" data-key="drag"> <img src="../images/liya.jpg" alt=""> <div class="line line-n" data-key="

  • js实现鼠标滑动到某个div禁止滚动

    本文实例为大家分享了js实现鼠标滑动到某个div禁止滚动的具体代码,供大家参考,具体内容如下 项目中碰到一个场景就是当鼠标滑倒某个div的时候,滑动鼠标页面不再滚动. 这里主要是当鼠标滑动到该div时,监听滚轮事件并通过preventDefault()事件来阻止滚动事件,以下是例子 eg: #wrap { position:absolute; top:200px; background:#000000; font-size: 40px; width:50vw; text-align: cente

  • js基于div丝滑实现贝塞尔曲线

    目录 引言 分析 实现 布局 如何计算y的偏移量 Math.sin() 和 Math.cos() 正弦曲线 余弦曲线 计算更多信息 完善剩余 完成跑马灯制作 贝塞尔曲线 简单封装一下方法 完整示例 style SCript 引言 今天遇到朋友发来的一个ui图,询问我如何实现下图这样的效果[vue项目],(听说是类似LED灯的展示效果),于是便有了今天的小demo,要实现一个类似下图的动效,上面的灯会一直重复滚动,但是这个并不是什么难点,主要在于如何实现这种平滑的曲线,日常我们的开发的div在我们

  • JavaScript实现div的鼠标拖拽效果

    本文实例为大家分享了JavaScript实现div鼠标拖拽效果的具体代码,供大家参考,具体内容如下 实现原理鼠标按下时根据onmousemove事件来动态获取鼠标坐标位置以此来更新div的位置,实现的前提时div要有一个定位效果,不然的话是移动不了它的. HTML <div class="box"></div> CSS样式 .box { position: absolute; width: 200px; height: 200px; background: re

  • JS如何监听div的resize事件详解

    需求 开发过程中经常遇到的一个问题就是如何监听一个div的size变化. 比如我用canvas绘制了一个chart,当canvas的size发生变化的时候,需要重新绘制里面的内容,这个时候就需要监听resize事件做处理. window上虽然可以添加resize事件监听,但这并不能满足我们的需求,因为很多时候,div的size发生了变化,但是window的size并没有改变. 不过我们可以间接利用window的resize事件监听来实现对于某个div的resize事件监听,请看下面具体实现. 对

  • JavaScript实现鼠标拖拽调整div大小

    本文实例为大家分享了JavaScript实现鼠标拖拽调整div大小的具体代码,供大家参考,具体内容如下 实现思路: 根据鼠标位置改变鼠标样式 当鼠标在div的边缘和四个角时显示不同的样式,通过cursor修改 当鼠标在div的边缘和四个角按下时记录具体坐标点位置, 并开始根据鼠标的移动修改div的尺寸 鼠标松开时结束尺寸修改 代码实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset=

  • vue.js 实现点击div标签时改变样式

    目录 1.点击某一项后样式发生改变(循环列表的每一项的样式改变) 2.切换样式应该是v-bind很常用的功能(单标签样式的改变) 3.实现联动(完整代码) 1.点击某一项后样式发生改变(循环列表的每一项的样式改变) 效果图 v-for循环展示productType中的数据 :class动态绑定样式表中.changeStyle的样式,将当前索引传递给changeSelectStyle @click点击事件触发函数changeStyle(),并将当前索引传递进去. <ul v-for="(it

  • vue.js实现点击图标放大离开时缩小的代码

    上篇文章给大家介绍了vue实现裁切图片同时实现放大.缩小.旋转功能 ,今天给大家介绍vue.js实现点击图标放大离开缩小功能,具体代码如下所示: @-webkit-keyframes pulse1 { from { -webkit-transform: scale3d(1.05, 1.05, 1.05); transform: scale3d(1.05, 1.05, 1.05); } to { -webkit-transform: scale3d(1, 1, 1); transform: sca

  • Vue.js实现点击左右按钮图片切换

    本文实例为大家分享了Vue.js实现点击左右按钮图片切换的具体代码,供大家参考,具体内容如下 关于图片切换,网上也有很多的说法,这边通过参考给出了如下所示的解决方案 效果: html 通过v-for循环展示图片列表itemlist,将图片路径保存在data中的itemlist中,添加上下按钮的点击事件. <template>   <div>     <div class="zs-adv">       <a title="上一页&qu

  • vue.js 实现点击按钮动态添加li的方法

    如下所示: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/vue.js" ></script> </head> <body> <div id="

  • 解决Vue.js应用回退或刷新界面时提示用户保存修改问题

    在实际应用中,运营人员在编辑数据时不希望因不小心点击了浏览器的回退或刷新按钮导致花费了很长时间编辑的数据丢失.可以采用以下两种手段防止运营编辑时丢失数据: 在运营人员刷新页面或回退时,自动保留数据至浏览器端本地存储,在重新进入编辑页面时再将数据从本地存储中加载到编辑界面. 第二种方法是在运营人员刷新或回退时,强提示运营人员有修改的数据尚未保存,询问是否继续. 无认采用哪一种方式,在技术实现上,我们需要首先能够监听到用户执行回退或刷新页面的动作. 实际上,当用户执行页面刷新时,会触发 window

  • JS实现点击li标签弹出对应的索引功能【案例】

    本文实例讲述了JS实现点击li标签弹出对应的索引功能.分享给大家供大家参考,具体如下: 需求:点击li标签,弹出对应的索引 先看效果: html结构: <ul id="ul1"> <li>我是li标签1</li> <li>我是li标签2</li> <li>我是li标签3</li> <li>我是li标签4</li> <li>我是li标签5</li> <

  • vue.js click点击事件获取当前元素对象的操作

    Vue.js可以传递$event对象 <body id="app"> <ul> <li v-on:click="say('hello!', $event)">点击当前行文本</li> <li>li2</li> <li>li3</li> </ul> <script> new Vue({ el: '#app', data: { message: 'He

  • JS 实现点击a标签的时候让其背景更换

    复制代码 代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script type=text/javascript src="alabel.js"></script> <style type=&q

  • vue.js入门教程之绑定class和style样式

    一.前言 相信大家都知道数据绑定一个常见需求是操作元素的 class 列表和它的内联样式.因为它们都是属性,我们可以用 v-bind 处理它们:我们只需要计算出表达式最终的字符串.不过,字符串拼接麻烦又易错.因此,在v-bind 用于 class 和 style 时,Vue.js 专门增强了它.表达式的结果类型除了字符串之外,还可以是对象或数组. 二.绑定 HTML Class 请注意:尽管可以用 Mustache 标签绑定 class,比如 class="{{ className }}&quo

  • vue.js 实现点击展开收起动画效果

    最近公司项目加了个页面,其中要求是这样的,点击对应列表,展开和收起,其实就是显示和隐藏内容部分:说来惭愧,我花了半天时间才搞出来(自黑一下~),接下来分享给大家,先上效果图: vue页面: <template> <div class="dealRecord-wrap"> <div class="title-contant" v-for="(item,index) in items " > <div cla

随机推荐