You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在swiper.js的slideChange事件中调用其他文件的tippy.js实例方法?

解决方法

问题出在你每次触发slideChange时都重新调用tippy($('.tippy'))——这会创建新的tippy实例,而非获取已初始化好的实例,因此调用hide()无法控制之前的弹窗。

这里提供两种可靠的解决思路:

思路一:保存初始化时的实例引用

在初始化tippy阶段,就把实例存储到全局或可访问的变量中:

// 初始化tippy时保存所有实例
window.tippyInstances = tippy('.tippy', {
    allowHTML: true,
    theme: 'light div lg',
    offset: [0, 16],
});

随后在swiper的事件回调里直接操作这个存储的实例集合:

window['swiper_'+id].on('slideChange', function () {
    console.log('slide changed');
    // 遍历所有tippy实例并执行隐藏
    window.tippyInstances.forEach(instance => {
        instance.hide();
    });
});

思路二:通过DOM元素获取已绑定的实例

tippy会自动将实例绑定到目标元素的_tippy属性上,你可以直接通过DOM元素获取对应实例:

window['swiper_'+id].on('slideChange', function () {
    console.log('slide changed');
    // 遍历所有带tippy类的元素,隐藏对应实例
    document.querySelectorAll('.tippy').forEach(el => {
        if (el._tippy) {
            el._tippy.hide();
        }
    });
});

如果使用jQuery,需要先将jQuery对象转为原生DOM数组,比如$('.tippy').get()后再遍历。

若只需隐藏特定范围内的tippy(比如当前slide外的),可以结合swiper的当前slide类名调整选择器进行精准筛选。

内容的提问来源于stack exchange,提问作者MeltingDog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:22:04