aYoungBoy8
aYoungBoy8
  • 发布:2025-04-24 16:11
  • 更新:2025-04-25 10:27
  • 阅读:142

【报Bug】没有挂载animation class却触发animation相关事件

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 14.6.1

浏览器平台: Firefox

浏览器版本: 136.0.4

项目创建方式: CLI

CLI版本号: 4.57

操作步骤:

view节点,包含image节点后,绑定animation事件

预期结果:

不会触发animation相关事件

实际结果:

触发了animation相关事件

bug描述:

view节点,包含了image节点后,监听view节点的animation相关事件,即使没有任何动画,也会触发事件,空的view节点不会触发。

2025-04-24 16:11 负责人:无 分享
已邀请:
DCloud_UNI_JBB

DCloud_UNI_JBB

是mode属性导致的dom结构变化,带上了animation属性,通过事件冒泡传递到了外层view处。如果不想触发的话,可以在image上阻止事件冒泡(参考第二张图片)

  • aYoungBoy8 (作者)

    我的html结构中,有很多个image子节点,那岂不是每个都要阻止一下,有别的方法吗?

    2025-04-24 22:47

  • 名帝

    回复 aYoungBoy8: 难搞,全局搜索: <image 然后批量加@animationstart.stop试试呢

    2025-04-25 10:47

DCloud_UNI_JBB

DCloud_UNI_JBB

只有mode属性为 widthFix 或者 heightFix 时才会触发动画事件

可以考虑在需要阻止动画的image组件上面添加.stop

<image lazy-load src="../../static/logo.png" mode="widthFix" @animationstart.stop></image>

或者封装一个组件

// StopPropagationImage.vue  
<template>  
  <image v-bind="$attrs" @compositionstart="handleCompositionStart" />  
</template>  

<script>  
export default {  
  methods: {  
    handleCompositionStart(e) {  
      e.stopPropagation()  
    }  
  }  
}  
</script>  

// 使用方式  
<stop-propagation-image />
DCloud_UNI_JBB

DCloud_UNI_JBB

您好,方便发个可复现代码或demo吗?以便于更好的排查问题

  • aYoungBoy8 (作者)

    快看一下,严重bug,相关的animation事件都要触发

    2025-04-24 16:25

aYoungBoy8

aYoungBoy8 (作者)

<template>  
            <view class="li" @animationstart="handleStart">  
                <view class="label">隐私政策</view>  
                <image src="/src/static/icon/icon_more_arrow.png" mode="widthFix"></image>  
            </view>  
</template>  

<script setup>  

    const handleStart = () => {  
        console.log('触发了事件');  
    }  

</script>  

<style lang="scss" scoped>  

</style>

将image节点注释掉后,事件就不会触发

  • 爱豆豆

    是widthFix影响到的 删了就不会触发

    2025-04-24 16:59

要回复问题请先登录注册