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

如何在Fancybox画廊中实现鼠标悬停切换图片?

嘿,我明白你的需求啦——点击缩略图用Fancybox打开大图后,鼠标悬停在大图上能切换到另一版本,移出再切回来对吧?之前你试的代码都是针对缩略图的img标签,没法作用到Fancybox里动态生成的大图,这就给你解决办法~

核心思路

Fancybox的大图是动态生成的元素,所以不能直接给原始的<a>标签绑定事件,得等Fancybox加载完成后,找到它生成的大图元素再绑定鼠标事件。另外,我们可以给每个缩略图链接加个自定义data属性,用来存备用图的地址,这样不用硬写路径替换,更灵活。

步骤1:修改你的HTML结构

给每个带data-fancybox的<a>标签添加data-src-alt属性,用来存放要切换的第二张大图地址:

<a data-fancybox="gallery" href="images/rt/test1.jpg" data-src-alt="images/rt/test2.jpg" data-caption="lorem ipsum">
  <img src="images/rt/thumb.jpg" height="85px" width="85px">
</a>

如果是多个图片的画廊,只要给每个<a>都加上对应的data-src-alt就行。

步骤2:用Fancybox的API绑定鼠标事件

根据你用的Fancybox版本,选对应的代码:

如果你用的是Fancybox 3+(推荐)

直接在初始化Fancybox的时候,利用afterShow钩子来绑定事件:

// 初始化Fancybox并绑定切换逻辑
$('[data-fancybox="gallery"]').fancybox({
  afterShow: function(instance, current) {
    // 获取当前幻灯片对应的原始<a>标签
    var originalLink = current.opts.$orig;
    // 从data属性里拿备用图地址
    var alternateSrc = originalLink.data('src-alt');
    // 获取Fancybox里的大图元素
    var $largeImage = current.$image;
    
    // 保存原始大图地址,用于鼠标移出时恢复
    var originalSrc = $largeImage.attr('src');
    
    // 先解绑之前的事件(防止重复绑定),再绑定鼠标进出事件
    $largeImage.off('mouseenter mouseleave')
      .on('mouseenter', function() {
        $(this).attr('src', alternateSrc);
      })
      .on('mouseleave', function() {
        $(this).attr('src', originalSrc);
      });
  }
});

如果你用的是旧版Fancybox(比如2.x)

可以监听全局的afterShow事件:

// 监听Fancybox展示完成的事件
$(document).on('afterShow', '.fancybox-container', function() {
  // 获取当前幻灯片对应的原始<a>标签
  var currentLink = $('.fancybox-slide--current').data('orig');
  var alternateSrc = $(currentLink).data('src-alt');
  var $largeImage = $('.fancybox-image');
  
  var originalSrc = $largeImage.attr('src');
  
  $largeImage.off('mouseenter mouseleave')
    .on('mouseenter', function() {
      $(this).attr('src', alternateSrc);
    })
    .on('mouseleave', function() {
      $(this).attr('src', originalSrc);
    });
});

为什么之前的代码没用?

你之前写的代码都是绑定在原始的<a>或缩略图img上,但Fancybox打开后显示的大图是它自己动态创建的新元素,和原始标签没关系,所以必须等Fancybox渲染完成后,再给这个新元素绑定事件~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:38:04