前端:运用html+css+js模仿京东上商品图片区域放大特效

这篇具有很好参考价值的文章主要介绍了前端:运用html+css+js模仿京东上商品图片区域放大特效。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前端:运用html+css+js模仿京东上商品图片区域放大特效,前端,前端,html,css

1. 前言

最近在网页端浏览京东上的商品时,觉得上面的那张gif图片上实现的特效不错,于是自己打算使用html+css+js技术来实现一下上述特效效果,我的实效果如下:

前端:运用html+css+js模仿京东上商品图片区域放大特效,前端,前端,html,css

2. 前端界面

主要使用到浮动、绝对定位、相对定位等知识,不了解这部分知识点的读者可以先去了解了解,再来阅读小编这篇博文。开始实现时,出现了较多的问题,最后考虑使用设置背景图片属性,而不是直接使用img标签。我们知道,当一个盒子的宽高小于其背景图片大小时,只会显示其背景图片的一部分,如果没有设置background-position属性值,默认情况下,显示的图片部分为背景图片的左上角部分。前端:运用html+css+js模仿京东上商品图片区域放大特效,前端,前端,html,css
其中class属性值为small_img和big_img的盒子设置为左浮动,同时small_img设置定位为相对定位,big_img的display设置为none(默认情况下不显示,只有当鼠标移入到图片区域时才显示);class属性值为other的盒子设置为绝对定位,其display属性值为none(默认情况下不显示,只有当鼠标移入图片区域时才显示)。
前端:运用html+css+js模仿京东上商品图片区域放大特效,前端,前端,html,css

3. js实现鼠标移入效果

考虑到鼠标移入图片区域时,鼠标处于other盒子中心位置问题,只有当鼠标位置处于图片区域边缘时,鼠标不处于other盒子中心,其他情况下均处于other盒子中心位置,为此需要根据鼠标在small_img盒子的位置来来进行一系列判断,如下:
前端:运用html+css+js模仿京东上商品图片区域放大特效,前端,前端,html,css
注意到上述图片中代码是根据small_img的背景图片(宽高均为450px)和big_img的背景图片(宽高均为800px)进行计算得出的,虽然进行了一系列判断,但是还是有的情况下不会进入判断,比如处于边缘情况下,mouseX可能满足要求,但mouseY可能不满足条件,为此初始条件下x=mouseX,y=mouseY。文章来源地址https://www.toymoban.com/news/detail-576352.html

4. 实现代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>京东商城图片</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        .main{
            width: 900px;
            height: 450px;
            margin: 20px auto;
        }

        .main >div{
            width: 450px;
            height: 450px;
            z-index: 2;
            float: left;
        }
        .small_img{
            background-image: url('https://img10.360buyimg.com/n1/s450x450_jfs/t1/211447/30/24860/68358/62e8fa30Ed16f2c10/3897f1eb3281d4cd.jpg');
            position: relative;
        }
        .big_img{
            display: none;
            width: 400px !important;
            height: 400px !important;
            background-image: url('https://img10.360buyimg.com//n0/jfs/t1/211447/30/24860/68358/62e8fa30Ed16f2c10/3897f1eb3281d4cd.jpg');
            background-repeat: no-repeat;
        }

        .other{
            width: 225px;
            height: 225px;
            background-color: rgba(1, 1, 1, 0.2);
            z-index: 3;
            position: absolute;
            cursor: move;
            display: none;
        }
    </style>
</head>
<body>
    <div class="main">
        <div class="small_img">
            <div class="other">
            
            </div>
        </div>
        <div class="big_img">
        
        </div>
    </div>
</body>
<script type="text/javascript">
    const small_img = document.querySelector('.small_img');
    const other = document.querySelector('.other');
    const big_img = document.querySelector('.big_img');
    const a = 800 / 450 ;

    small_img.onmouseover = ()=>{
        other.style.display = 'block';
        big_img.style.display = 'block';

        small_img.onmousemove = (e) => {
            let mouseX = e.clientX - small_img.getBoundingClientRect().left;
            let mouseY = e.clientY - small_img.getBoundingClientRect().top;

            let x = mouseX,y = mouseX;
            if (mouseX < 112.5)
                x = 0;

            if (mouseY < 112.5)
               y = 0;

            if (mouseX > 450 - 112.5)
                x = 225 + 'px';

            if (mouseY > 450 - 112.5)
                y = 225 + 'px';

            if (mouseX >= 112.5 && mouseX <= 450 - 112.5)
                x = mouseX - 112.5 + 'px';

            if (mouseY >= 112.5 && mouseY <= 450 - 112.5)
                y = mouseY - 112.5 + 'px';
            
            other.style.left = parseFloat(x) + 'px';
            other.style.top = parseFloat(y) + 'px';


            big_img.style.backgroundPosition = `-${parseFloat(x) * a}px -${parseFloat(y) * a}px`;
        }
    }
    

    small_img.onmouseout = () => {
        other.style.display = 'none';
        big_img.style.display = 'none';
    }
    
</script>
</html>

到了这里,关于前端:运用html+css+js模仿京东上商品图片区域放大特效的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HTML+CSS仿写京东页面附代码(web前端大作业)

    学习前端时间不多,看了两晚上就开始赶实训作业,大家看看就行 先来看看效果:         相关资源可以在主页资源查看

    2024年02月11日
    浏览(57)
  • Python如何运用爬虫爬取京东商品评论

    打开京东商品网址(添加链接描述) 查看商品评价 。我们点击评论翻页,发现网址未发生变化,说明该网页是动态网页。 我们在 浏览器右键点击“检查” ,,随后 点击“Network” ,刷新一下,在搜索框中 输入”评论“ ,最终找到 网址(url) 。我们点击Preview,发现了我们需要

    2024年02月07日
    浏览(47)
  • 前端Vue自定义轮播图视频播放组件 仿京东商品详情轮播图视频Video播放效果 可图片预览

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随

    2024年02月15日
    浏览(53)
  • 前端(HTML + CSS + JS)

    HTML是超文本标记语言,超文本是指文本、声音、图片、视频、表格、链接等等。标记表示由许许多多的标签组成。HTML页面是运行到浏览器上的。 (1)HTML 文件基本结构 html 标签是整个 html 文件的根标签(最顶层标签) head 标签中写页面的属性 body 标签中写的是页面上显示的内

    2024年02月05日
    浏览(49)
  • 前端基础面试题(HTML,CSS,JS)

    前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库  web前端面试题库 VS java后端面试题库大全 代码结构:  使页面在没有css的情况下,也能够呈现出好的内容结构 有利于SEO:  爬虫根据标签来分配的权重,因此可以和搜索引擎建立良好的沟通,帮助爬虫抓

    2024年02月09日
    浏览(52)
  • 前端 :用HTML , CSS ,JS 做一个秒表

    2024年02月06日
    浏览(42)
  • 常见前端基础面试题(HTML,CSS,JS)(三)

      类型转换可以分为两种, 隐性转换 和 显性转换 主要分为三大类:数值类型、字符串类型、布尔类型 三大类的原始类型值的转换规则我就不一一列举了 数值类型(引用类型转换) 字符串类型(引用类型转换) 类型 转换前 转换后 number 4 4 string \\\"1\\\" 1 string \\\"\\\" 0 boolean true 1 b

    2024年02月12日
    浏览(61)
  • 前端HTML、CSS、JS、VUE3 汇总

    学习https://developer.mozilla.org/zh-CN/docs/Learn/CSS 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 使用VS Code运行前端代码 在VS Code上安装前端插件 正在更新中~ ✨ 提示:这里可以添加本文要记录的大概内容: 学习路线 知识定位 HTML基础 标签、表格、表单、

    2024年02月13日
    浏览(50)
  • Selenium介绍--实例爬取京东商品信息与图片

    目录 一、Selenium简介 二、Selenium组成 三、Selenium特点 四、Selenium的基本使用 1.下载所用浏览器需要的驱动 2.创建项目并导入依赖 3.入门 3.代码演示 五、实例爬取京东商品信息与图片 _ 5.1 执行效果 操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chr

    2023年04月08日
    浏览(37)
  • ChatGPT给出的前端面试考点(html+css+JS)

    HTML HTML是什么,它的主要作用是什么? 什么是DOCTYPE,为什么在HTML文档中使用它? HTML5相对于之前的HTML版本有哪些主要的新特性? 解释语义化HTML的概念。为什么要使用语义化标签? 如何在HTML中嵌入JavaScript和CSS? 什么是表单,如何在HTML中创建一个表单? 什么是响应式图片

    2024年01月21日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包