首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue——vue2监听元素style变化

Vue——vue2监听元素style变化

作者头像
思索
发布于 2024-08-15 01:22:44
发布于 2024-08-15 01:22:44
25000
代码可运行
举报
运行总次数:0
代码可运行

前言

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

内容

元素绑定ref

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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来实现监听;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
    }
  },
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 内容
    • 元素绑定ref
    • 监听元素
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档