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

鼠标X轴控制图片序列播放:div宽度适配及加载闪烁问题求助

修复方案

问题1:触发逻辑适配div宽度

  • 直接删除重复定义的第二个onResize函数即可,同名函数后定义的会覆盖前者,原代码里第二个onResize把宽度赋值成了文档宽度,导致基准错误
  • 额外补充坐标偏移计算:如果目标div不是贴合页面左侧放置,需要用鼠标位置减去div的左偏移量,得到相对div内部的X坐标,计算更准确

问题2:鼠标移动画面闪烁

  • 新增图片预加载逻辑,页面初始化时就把所有序列图加载到浏览器缓存,切换背景时直接调用缓存资源,不会出现等待加载的空白间隙
  • 补充数组下标边界判断,避免坐标超出div范围时数组下标越界报错

修正后完整代码

var blocWidth;
var imgblock = ['https://assets.codepen.io/265602/frame0.png', 
                'https://assets.codepen.io/265602/frame1.png',
                'https://assets.codepen.io/265602/frame2.png',
                'https://assets.codepen.io/265602/frame3.png',
                'https://assets.codepen.io/265602/frame4.png',
                'https://assets.codepen.io/265602/frame5.png',
                'https://assets.codepen.io/265602/frame6.png',
                'https://assets.codepen.io/265602/frame7.png',
                'https://assets.codepen.io/265602/frame8.png',
                'https://assets.codepen.io/265602/frame9.png',
                'https://assets.codepen.io/265602/frame10.png',
                'https://assets.codepen.io/265602/frame11.png',
                'https://assets.codepen.io/265602/frame12.png',
                'https://assets.codepen.io/265602/frame13.png',
                'https://assets.codepen.io/265602/frame14.png',
                'https://assets.codepen.io/265602/frame15.png',
                'https://assets.codepen.io/265602/frame16.png',
                'https://assets.codepen.io/265602/frame17.png',
                'https://assets.codepen.io/265602/frame18.png',
                'https://assets.codepen.io/265602/frame19.png',
                'https://assets.codepen.io/265602/frame20.png'];

// 预加载所有图片
function preloadImgs() {
  imgblock.forEach(imgUrl => {
    const img = new Image();
    img.src = imgUrl;
  })
}

function onMouseMove(e) {
    // 计算鼠标相对于bloc1的X坐标
    const blocOffsetLeft = $('.bloc1').offset().left;
    let x = e.pageX - blocOffsetLeft;
    // 边界处理,避免坐标超出div范围时报错
    x = Math.max(0, Math.min(x, blocWidth));
    // 数组下标最大为imgblock.length - 1,避免越界
    const imgIndex = Math.min(parseInt(x / blocWidth * imgblock.length), imgblock.length - 1);
    const theimg = imgblock[imgIndex];
    $('.bloc1').css("background-image", `url('${theimg}')`);
}

function onResize() {
    blocWidth = $('.bloc1').width();
}

// 初始化执行
preloadImgs();
onResize();
$(window).on('mousemove', onMouseMove);
$(window).resize(onResize);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 05:24:07