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

如何定时切换img的src?能否用jQuery的delay()实现两次切换后停止?

用jQuery的delay()实现图片定时切换?可行但得用对姿势!

嘿,这个问题问得挺实在的!直接用delay()来切换图片的src属性是行不通的,得先搞明白delay()的本质:它只针对jQuery的动画队列生效——像fadeIn()、slideDown()这类自带队列的动画方法,才能被delay()延迟;而attr('src', ...)这种普通DOM属性操作,根本不会加入动画队列,所以delay()管不着它,会直接立刻执行。

那要实现你要的“1000ms后切第一张,再1000ms切第二张,停在最后一张”的效果,有两种靠谱的方式:

方式一:用原生setTimeout嵌套(最直观)

这种方式逻辑清晰,新手也容易理解:

// 先选中你的图片元素
const $targetImg = $('#your-image-id');
// 准备好要切换的图片地址数组
const imageList = ['first-switch.jpg', 'final-image.jpg'];

// 第一次延迟切换
setTimeout(() => {
  $targetImg.attr('src', imageList[0]);
  // 第二次延迟切换
  setTimeout(() => {
    $targetImg.attr('src', imageList[1]);
  }, 1000);
}, 1000);

方式二:用queue()配合delay()(贴合jQuery队列思路)

如果你非要用delay(),就得把属性切换操作塞进动画队列里,用queue()方法来实现:

const $targetImg = $('#your-image-id');
const imageList = ['first-switch.jpg', 'final-image.jpg'];

$targetImg
  // 先等1000ms
  .delay(1000)
  // 把切换操作加入队列
  .queue(function(next) {
    $(this).attr('src', imageList[0]);
    next(); // 必须调用next(),不然队列会卡住,后续操作不执行
  })
  // 再等1000ms
  .delay(1000)
  // 切换到最后一张,这里不用next()因为后面没队列操作了
  .queue(function() {
    $(this).attr('src', imageList[1]);
  });

总结一下:delay()本身不能直接延迟src切换,但通过把操作加入动画队列(用queue()),或者用原生setTimeout,都能完美实现你要的定时切换效果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:17:43