javascript - 在 mousemove 上交换多个图像

标签 javascript jquery css html swap

我想做的是在 mousemove 上从左到右显示产品其他版本的图像。这是简单的 html 示例:

    <article>
      <figure data-imageList="image2.jpg,image3.jpg,image4.jpg">
        <img data-src="main-image.jpg" src="main-image.jpg">
      </figure>
    </article>

正如您在 html 中看到的,图像 src 将从数据图像列表中更改。当用户鼠标离开文章时,main-image.jpg 将再次出现。这将是默认图像。当用户仅在当前文章上从左向右移动鼠标时,应触发该功能。其他列表项不应受到鼠标移动的影响。也许,我应该创建一个唯一的 ID 或使用“每个功能”来做到这一点。反正我也解决不了那个问题...

谁能帮我解决这个问题。我真的不擅长 javascript。

谢谢!

最佳答案

刚刚制作了一个Fiddle使用一些虚拟图像作为数据属性并遵循 jQuery:

    $("img").mousemove(function (event) {
    var xPos = event.pageX;
    $images = $("figure").data("imageList");
    var array = $images.split(',');
    if (xPos > 40) {
        $("img").attr("src", array[0]);
    }
    if (xPos > 65) {
        $("img").attr("src", array[1]);
    }
    if (xPos > 85) {
        $("img").attr("src", array[2]);
    }

});
$("img").mouseout(function () {
    $("img").attr("src", $("img").data("src"));
});

仅用于演示小图像。当图像应该交换时,可以根据实际图像大小正确计算,但对于演示只是硬编码值。

供引用:http://api.jquery.com/data/

更新:根据进一步要求,同样的响应示例:Change responsive image

$(".imageHolder").mousemove(function (event) {
    var xPos = event.pageX,
        imgPos = $(".imageHolder").offset().left,
        imgWidth = $(".imageHolder").width();
    var change1 = imgPos,
        change2 = imgPos + imgWidth / 3,
        change3 = imgPos + 2 * imgWidth / 3;
    $images = $("figure").data("imageList");

    var array = $images.split(',');
    if (xPos > change1) {
        $("img").attr("src", array[0]);
    }
    if (xPos > change2) {
        $("img").attr("src", array[1]);
    }
    if (xPos > change3) {
        $("img").attr("src", array[2]);
    }


});
$("img").mouseout(function () {
    $("img").attr("src", $("img").data("src"));
});  

CSS:

figure {
    width:100%;
    max-width:200px;
}
img {
    position:relative;
    width:100%;
}

我还在图像中添加了 imageHolder 类(不是必需的,但太习惯于使用类而不是仅仅应用于元素)并将控制台日志消息留在 Fiddle 中,这样更容易检查计算宽度和位置。
提供的示例中的另一个小调整是将数据属性的名称从 data-imageList 更改为 data-image-list ,也就是习惯了。原因是命名约定,每个连字符 data- 属性将被检索减去连字符和驼峰(连字符后的第一个字母),因此 data-image-list 将被检索为 $.data("图片列表”)。此处的附加引用:W3C - The "data-"-attribute
如果使用的数据属性的名称已经是驼峰式,那么它是可检索的小写:data-imageList="value1, value2, valu3" -> $。数据(“图像列表”)。虽然在 jQuery-api 中没有提到,描述例如这里:http://bugs.jquery.com/ticket/9066

关于javascript - 在 mousemove 上交换多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25896664/

相关文章:

javascript - 使用 jQuery 添加 HTML 代码

javascript - jquery 表单选择器单选按钮和复选框

jquery - 在全日历中显示图像作为背景

javascript - 如何使用 jQuery 在鼠标悬停时制作简单的淡入淡出效果或慢速动画

html - 链接 CSS 文件夹而不是单个文件?

html - 如何将 HTML 剪切并粘贴到 Microsoft Word 并获得样式?

jquery 移动网站底部的灰色条

javascript - Bootstrap 轮播事件指示器 onclick 不会暂停

javascript - 计算圆度

javascript - 在react-native中测试按钮onClick功能