Vue——vue2监听元素style变化

简介: Vue——vue2监听元素style变化

前言

纯粹是为了偷懒,不想再安装swiper来渲染,直接改造下element-ui的走马灯,实现类似的效果,最主要的是后续会迭代到vue3,所以这里临时的实现下即可;

内容

元素绑定ref

给需要监听的元素添加ref,这里是ref="carouse"

<div
                    v-for="(nodes, index) in form.bricks"
                    :key="index"
                    :class="activeIndex === index? 'active' : ''"
                  >
                    <component
                      :is="nodes.els.el"
                      :type="nodes.els.type"
                      :autoplay="!!nodes.auto_play"
                      :src="nodes.els.src"
                      arrow="never"
                      :height="computedHeight(nodes)"
                      @click.native="handleClickNode({...nodes, ...{index: index}})"
                    >
                      <el-carousel-item
                        v-for="(item, i) in nodes.group_content"
                        :key="i"
                        ref="carouse"
                      >
                        <el-image
                          :src="item.src"
                          :class="['carousel'].includes(nodes.group_type)? 'margin-right-xxl' : ''"
                        />
                      </el-carousel-item>
                    </component>
                  </div>

监听元素

leftNav 为左边侧边栏数据,当点击添加的时候会塞入相应的数据,监听该数据变化即可;

主要还是基于MutationObserver来实现监听;

watch: {
    leftNav: {
      handler(val) {
        if (val.group_type !== 'carousel') return ''
        this.$nextTick(() => {
          const elements = this.$refs.carouse
          elements.forEach((element, index) => {
            const observer = new MutationObserver((mutationsList) => {
              for (const mutation of mutationsList) {
                if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
                  if (element.translate > 0) element.translate = 350
                }
              }
            })
            const config = { attributes: true, attributeFilter: ['style'] }
            observer.observe(element.$el, config)
          })
        })
      },
      deep: true
    }
  },

学无止境,谦卑而行.

目录
相关文章
|
1天前
|
缓存 JavaScript 前端开发
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
9 3
|
18小时前
|
缓存 JavaScript
Vue 中 computed 与 method 的区别
【10月更文挑战第15天】computed 和 method 是 Vue 中两个重要的选项,它们在功能和特点上存在着明显的区别。理解并合理运用它们的区别,可以帮助我们构建更高效、更具可维护性的 Vue 应用。在实际开发中,要根据具体情况灵活选择使用,以满足不同的需求。
5 2
|
18小时前
|
JavaScript 搜索推荐 UED
vue的自定义指令
【10月更文挑战第14天】Vue 自定义指令为我们提供了一种强大的工具,使我们能够更灵活地控制和扩展 Vue 应用的行为。通过合理地使用自定义指令,可以提高开发效率,增强应用的功能和用户体验。
|
18小时前
|
JavaScript UED
在 Vue 中使用自定义指令
【10月更文挑战第14天】通过合理地使用自定义指令,可以为 Vue 应用带来更多的灵活性和扩展性,提高开发效率和用户体验。
|
前端开发 JavaScript
Vue.js中class与style的增强绑定
Vue.js中class与style的增强绑定
113 0
|
Web App开发 前端开发 JavaScript
|
前端开发 JavaScript
vue中class与style的绑定
数据绑定一个常见需求是操作元素的 class 列表和它的内联样式。因为它们都是属性 ,我们可以用v-bind 处理它们:只需要计算出表达式最终的字符串。不过,字符串拼接麻烦又易错。因此,在 v-bind 用于 class 和 style 时, Vue.js 专门增强了它。
1942 0
|
JavaScript
Vue.js之Class 与 Style 绑定
数组语法: 我们可以把一个数组传给 v-bind:class ,以应用一个 class 列表: wo data: { activeClass: 'active', err...
778 0
|
3天前
|
JavaScript 前端开发 开发者
Vue v-for 进阶指南:in 与 of 的区别及应用场景 | 笔记
Vue.js 中的 v-for 是强大的遍历指令,但其中的 in 和 of 关键字往往被开发者忽视。尽管它们的用法相似,但适用的场景和数据结构却各有不同。本文将详细探讨 v-for 中 in 和 of 的区别、适用场景以及在实际开发中的最佳使用时机。通过理解它们的差异,你将能够编写更加高效、简洁的 Vue.js 代码,灵活应对各种数据结构的遍历需求。
37 6
|
1天前
|
JavaScript