放大镜案例

news2025/1/6 18:49:32

放大镜

在这里插入图片描述

<!DOCTYPE html>
<html lang="zh-cn">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>商品放大镜</title>
  <link rel="stylesheet" href="css/reset.css">
  <style>
    .product-intro {
      position: relative;
      width: 450px;
      margin: 100px 0 0 200px;
      border: 1px solid #ccc;
    }

    .preview {
      position: relative;
    }

    .enlargement {
      display: none;
      overflow: hidden;
      position: absolute;
      top: -1px;
      left: 450px;
      width: 540px;
      height: 540px;
      border: 1px solid #ccc;
    }

    .mask {
      display: none;
      position: absolute;
      top: 0;
      left: 0;
      width: 60%;
      height: 60%;
      background-color: rgba(228, 228, 11, 0.3);
      border: 1px solid rgba(122, 122, 122, .4);
      cursor: move;
    }

    .active {
      display: block;
    }
  </style>
</head>

<body>
    <!-- 这里推荐用两张大小不用的图片,也不是只用高清图然后缩小,因为在商品总览列表中,会用到小图,图片越小加载的速度就快,能用小图就用小图 -->
  <div class="product-intro">
    <div class="preview">
      <img src="images/m30.jpg" width="450" height="450" alt="m30">
      <div class="mask"></div>
    </div>
    <div class="enlargement">
      <img src="images/m30-big.jpg" alt="m30">
    </div>
  </div>
  <script src="js/common.js"></script>
  <script>
    var oPreview = $('.preview');
    var oMask = $('.mask');
    var oEnlarge = $('.enlargement');
    var oEnlargeImg = $('.enlargement>img');

    var mouseEventMap = {
      mouseenter: function (e) {
        oMask.classList.add('active');
        oEnlarge.classList.add('active');
      },
      mouseleave: function (e) {
        oMask.classList.remove('active');
        oEnlarge.classList.remove('active');
      },
      mousemove: function (e) {
        var x = e.clientX - oMask.offsetWidth / 2 - getPosition(oPreview).left;
        var y = e.clientY - oMask.offsetHeight / 2 - getPosition(oPreview).top;

        x = Math.min(x, oPreview.offsetWidth - oMask.offsetWidth);
        x = Math.max(x, 0);

        y = Math.min(y, oPreview.offsetHeight - oMask.offsetHeight);
        y = Math.max(y, 0);

        oMask.style.left = x + 'px';
        oMask.style.top = y + 'px';

        // 展示比例   (展示区图片宽度 - 展示区宽度) / (预览区宽度 - 遮罩层宽度)

        var moveX = (oEnlargeImg.offsetWidth - oEnlarge.offsetWidth) / (oPreview.offsetWidth - oMask.offsetWidth);
        var moveY = (oEnlargeImg.offsetHeight - oEnlarge.offsetHeight) / (oPreview.offsetHeight - oMask.offsetHeight);

        oEnlargeImg.style.marginLeft = -x * moveX + 'px';
        oEnlargeImg.style.marginTop = -y * moveX + 'px';
      }
    }

    oPreview.addEventListener('mouseenter', handle, false);
    oPreview.addEventListener('mouseleave', handle, false);
    oPreview.addEventListener('mousemove', handle, false);

    function handle(e) {
      if (mouseEventMap[e.type] && typeof mouseEventMap[e.type] === 'function') {
        mouseEventMap[e.type](e);
      }
    }

  </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1908360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】五子棋(c语言实现)

这里写目录标题 最终效果菜单打印函数棋盘的初始化和打印人人对战落子判空函数悔棋函数判胜负函数人人对战 人机对战一是将直接调用rand生成随机值&#xff0c;这就不可控二是根据棋子赢面来判断哪里落子最好 如果选择退出程序直接exit就行主函数调用逻辑源代码 最终效果 五子棋…

电脑显示x3daudio1_7.dll丢失如何修复,总结5种靠谱的修复方法

在使用电脑时&#xff0c;若系统提示x3daudio1_7.dll文件丢失&#xff0c;需及时进行修复操作&#xff0c;当此文件丢失或损坏时&#xff0c;人们可能会遇到一些音频功能方面的问题&#xff0c;如软件游戏无法正常启动运行。以下提供一种快速有效的修复方法。 一、了解x3daudio…

Flutter 是如何实现的 ?

Flutter 是由 Google 开发的一个开源 UI 软件开发工具包&#xff0c;用于构建跨平台的应用程序。Flutter 的核心理念是提供一个高度可定制、快速和现代的 UI 框架&#xff0c;它允许开发者使用一套代码库构建 Android、iOS、Web 和桌面应用程序。以下是 Flutter 的一些关键实现…

四川赤橙宏海商务信息咨询有限公司专业电商服务团队

在数字经济迅猛发展的今天&#xff0c;抖音电商以其独特的魅力和强大的市场潜力&#xff0c;成为了众多企业竞相追逐的蓝海。作为深耕抖音电商领域的专业服务商&#xff0c;四川赤橙宏海商务信息咨询有限公司凭借其丰富的经验和专业的团队&#xff0c;为众多商家提供了全方位、…

大模型应用元年,到底有哪些场景可以实际落地场景?

很多企业和个人都号称自己打造了AI大模型实际落地场景&#xff0c;其中有噱头、蹭热点&#xff0c;也有真实落地应用的。下面我将聊聊有哪些应用是真实落地可执行的。 大模型写作 生成式大语言大模型的看家本领非写作莫属。大模型输出logits的基础上加上top_p、top_k、temper…

spring boot集成easypoi导出word换行处理

项目场景&#xff1a; spring boot集成easypoi导出word <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version> </dependency> 问题描述 spring boo…

java中Request和Response的详细介绍

1.Request和Response的概述 # 重点 1. service方法的两个参数request和response是由tomcat创建的void service(ServletRequest var1, ServletResponse var2) 2. request 表示请求数据, tomcat将浏览器发送过来的请求数据解析并封装到request对象中servlet开发者可以通过reques…

Studying-代码随想录训练营day31| 56.合并区间、738.单调递增的数字、968.监控二叉树、贪心算法总结

第31天&#xff0c;贪心最后一节(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 56.合并区间 738.单调递增的数字 968.监控二叉树 贪心算法总结 56.合并区间 文档讲解&#xff1a;代码随想录合并区间 视频讲解&#xff1a;手撕合并区间 题目&#xf…

美妆网页设计(前端)

目录 一、 网站背景&#xff1a; 1、 背景介绍 2、 项目意义 二、 系统设计&#xff1a; 1.系统目标 2.系统功能结构 3.开发环境 三、 开发实现 1、导航栏 2、轮播效果效果 3、下拉菜单效果 4、模态框 遇到的问题及解决办法 五、 总结&#xff1a; 网站背景&…

【LabVIEW学习篇 - 5】:数据类型——数值、字符串

文章目录 数值枚举下拉列表控件 字符串字符串与十六进制截取字符串连接字符串 字符串与数值间的转换字符串转为数值数值转为字符串 数值 如下图所示&#xff0c;各种数值型数据的不同之处在于存储和表示数据时所使用的位置不同。 浮点型 整型 在LabVIEW中&#xff0c;想要改…

Android计算器界面的设计——表格布局TableLayout实操

目录 任务目标任务分析任务实施 任务目标 使用TextView、Button等实现一个计算器界面&#xff0c;界面如图1所示。 图1 计算器界面效果图 任务分析 界面整体使用表格布局&#xff0c;第一行使用一个TextView控件&#xff0c;横跨4列&#xff0c;中间4行4列&#xff0c;最后一…

Mysql笔记-v2

零、 help、\h、? 调出帮助 mysql> \hFor information about MySQL products and services, visit:http://www.mysql.com/ For developer information, including the MySQL Reference Manual, visit:http://dev.mysql.com/ To buy MySQL Enterprise support, training, …

EAI四个层次服务-系统架构师(二十六)

1、&#xff08;重点&#xff09;系统应用集成提供了4个不同层次服务&#xff0c;最上层服务是&#xff08;&#xff09;服务。 解析: EAI&#xff08;Enterprise Application Integration&#xff09;系统应用集成&#xff0c;相关概念。 实施EAI必须保证&#xff1a;应用程…

OS Copilot测评-CSDN

登录控制台 安装插件 sudo yum install -y os-copilot效果如下 配置 AccessKey ID 与 AccessKey Secret 注意安全&#xff0c;使用完成后&#xff0c;别忘了去控制台删除&#xff0c;一般情况使用子Key就可以 检测是否可用 co hi实际操作(当前为官方案例请求) 实操1&…

分区Partition

理解Partition 向量检索服务DashVector的Collection具有分区&#xff08;Partition&#xff09;的能力&#xff0c;同一个Collection下的Doc可通过不同的Partition进行物理和逻辑上的分区。各种Doc操作&#xff08;如插入Doc、检索Doc等&#xff09;若指定Partition&#xff0…

超好用的傲软录屏下载和解锁版安装教程 (专业好用的桌面录屏软件)

录屏系列软件安装目录 一、ZD屏幕录像机解锁版下载及安装教程 (一款小巧的轻量级屏幕录像工具) 二、班迪录屏Bandicam v7解锁版安装教程&#xff08;高清录屏软件&#xff09; 三、Mirillis Action v4 解锁版安装教程(专业高清屏幕录像软件) 四、Aiseesoft Screen Recorder…

react-类组件1

类组件&#xff1a; import { Component } from "react";class App extends Component {constructor() {super();this.state {message: "xxxxx",};}render() {return (<div><div>{this.state.message}</div></div>);} }export d…

如 何 避 开 职 场 雷 区

01 管理好自己的情绪 在职场中切忌过于情绪化&#xff0c;学会管理好自己的情绪是一个职场人必备的技能之一。坏情绪并不会帮助你解决任何问题&#xff0c;过多的抱怨&#xff0c;只会使你成为负能量的传播者。 在职场中&#xff0c;需要做的是管理好自己的情绪&#xff0c;积…

Python--并发编程--协程

概念 协程是轻量级的线程&#xff0c;它是程序员管理的并发机制&#xff0c;使得在一个线程中程序可以在多个函数之间交替运行。 Python中主要通过asyncio模块实现协程。 协程函数 用async修饰的函数 import asyncio# func为协程函数 async def func():await asyncio.slee…

【C语言】extern 关键字详解

在C语言中&#xff0c;extern关键字用于声明一个变量或函数是定义在另一个文件中的。它使得在多个文件之间共享变量或函数成为可能。extern关键字常见于大型项目中&#xff0c;通常用于声明全局变量或函数&#xff0c;这些变量或函数的定义位于其他文件中。 基本用法 变量声明…