放大镜制作(2)—此方法比较容易理解

<div class="box" id="box"><!--左侧的盒子--><div class="left_img"><!--图片--><img src="images/small.jpg" class="aaa" alt="小图片"/><!--黄色小盒子--><div class="mask"></div></div><!--右侧的盒子--><div class="right_img"><!--右侧盒子内的大图片--><img src="images/big.jpg" alt="大图片"/></div></div>

注意:此处的css结构,根据自己的书写方式进行描述即可

        *{margin: 0;padding: 0;/* box-sizing: border-box; */}.box{width: 1230px;height: 800px;margin: 100px auto;/* border: 1px solid black; */}.left_img{width: 400px;height: 400px;/* border: 5px solid black; */float: left;position: relative;}.left_img .mask{position: absolute;left: 0;top: 0;width: 200px;height: 200px;background-color: yellow;opacity: 0.5;display: none;cursor: move;}.right_img{position: relative;overflow: hidden;width: 400px;height: 400px;/* border: 5px solid black; */margin-left: 10px;float: left;display: none;}.right_img img{position: absolute;top: 0;left: 0;}
  // var box = document.querySelector('.box');var mask = document.querySelector('.mask');var right_img = document.querySelector('.right_img');var left_img = document.querySelector('.left_img');var rightImg = document.querySelector('.right_img img');//鼠标进入时,黄色盒子和右盒子进行隐藏left_img.addEventListener('mouseenter',function(){mask.style.display = 'block';right_img.style.display = 'block';//给盒子设置鼠标进入事件left_img.onmousemove = function(e){//遮盖的小盒子跟随鼠标的位置进行移动//鼠标的横坐标 = 鼠标距离整个页面左侧的距离 - 当前盒子左侧的距离//鼠标的纵坐标 = 鼠标距离整个页面上方的距离 - 当前盒子上方的距离 //mask.offsetWidth / 2;  ,  mask.offsetHeight / 2;  是为了让鼠标的位置在遮罩盒子的正中央显示var mx = e.clientX - this.offsetLeft - mask.offsetWidth / 2;var my = e.clientY - this.offsetTop - mask.offsetHeight / 2;//将鼠标的位置信息赋值给当前的遮罩盒子// mask.style.left = mx + 'px';// mask.style.top = my + 'px';//限制元素水平方向移动的最小距离 + 元素在水平方向最大的横坐标var min_x = 0;var max_x = left_img.offsetWidth - mask.offsetWidth;var min_y = 0;var max_y = left_img.offsetHeight - mask.offsetHeight;//要用鼠标实时的位置 和 限制的范围比较//水平方向的位置进行比较mx = mx <= min_x ? min_x : mx;mx = mx >= max_x ? max_x : mx;//垂直方向的位置进行比较my = my <= min_y ? min_y : my;my = my >= max_y ? max_y : my;//最后将限制后的位置赋值给遮罩盒子mask.style.left = mx + 'px';mask.style.top = my + 'px';//实现右侧盒子中大图片的移动//左侧遮罩盒子移动的距离:左侧盒子的宽度 = 右侧图片移动的距离 : 右侧图片的宽度//例如:1 :1 = 2 :2//右侧图片的移动距离 = 左侧遮罩盒子移动的距离 * 右侧图片的宽度 / 左侧盒子的宽度;// 例如:2 = 1 * 2 / 1rightImg.style.left = - mx * rightImg.offsetWidth / left_img.offsetWidth + 'px';rightImg.style.top = - my * rightImg.offsetHeight / left_img.offsetHeight + 'px';}});//鼠标离开时,黄色盒子和右盒子进行隐藏left_img.addEventListener('mouseleave',function(){mask.style.display = 'none';right_img.style.display = 'none';});

实现效果:

在这里插入图片描述

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

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

相关文章

js(Dom+Bom)第八天—Swiper(插件)

Swiper插件(库) 01-基本介绍 Swiper 是一款免费以及轻量级的移动设备触控滑块的js框架&#xff0c;使用硬件加速过渡&#xff08;如果该设备支持的话&#xff09;。主要使用于移动端的网站、移动web apps&#xff0c;native apps和hybrid apps。主要是为IOS而设计的&#xff…

第七节:EF Core调用SQL语句和存储过程

一. 查询类(FromSql) 1.说明 A. SQL查询必须返回实体的所有属性字段。 B. 结果集中的列名必须与属性映射到的列名相匹配。 C. SQL查询不能包含关联数据 D. 除Select以为的其它SQL语句无法运行。 2.调用SQL语句的几种情况 A. 基本的原生SQL查询 B. 利用$内插语法进行传递 C. 原生…

js(Dom+Bom)第八天

JavaScript 移动端事件介绍 touch事件类型 移动设备上无法使用鼠标&#xff0c;当手指按下屏幕的时候会触发 click,mousedown,mouseup事件&#xff0c;但是在移动设备上有专门的事件&#xff1a; touch 备注&#xff1a; 在移动端touch事件需要通过事件监听的方式添加touchsta…

为什么mysql 5.7.24启停不显示错误信息?log-error_verbosity参数

关键词&#xff1a;log-error_verbosity &#xff0c;mysql启停没有信息&#xff0c;mysql启停不显示错误信息&#xff0c;mysql不显示启停信息 原因就是因为 log-error_verbosity 2 被设置成了1/2&#xff0c;需要设置成3才行。 转载自&#xff1a;https://www.cnblogs.com/k…

ASP.NET Core 3.0中使用动态控制器路由

原文&#xff1a;Dynamic controller routing in ASP.NET Core 3.0 作者&#xff1a;Filip W 译文&#xff1a;https://www.cnblogs.com/lwqlun/p/11461657.html 译者&#xff1a;Lamond Lu 译者注 今天在网上看到了这篇关于ASP.NET Core动态路由的文章&#xff0c;感觉蛮有意思…

d3.js 教程 模仿echarts折线图

今天我们来仿echarts折线图,这个图在echarts是折线图堆叠&#xff0c;但是我用d3改造成了普通的折线图&#xff0c;只为了大家学习&#xff08;其实在简单的写一个布局就可以&#xff09;。废话不多说商行代码。 1 制作 Line 类 class Line {constructor() {this._width 1100;…

vue中v-for的使用

本人正在开始学习Vue,每天写写基础的记录,希望对大家有帮助,如有错误还望指出,我也是一个小白,也希望大家能一起进步 v-for指令的使用: 1.循环普通数组 item in list 中的item是自己个想写什么名写什么名 另一种写法 i 表示索引值 2.循环对象数组 3.循环普通对象 4.迭代数字 注…

js高级第一天

JavaScript面向对象 1.1两大编程思想&#xff1a; 1、面向过程 ​ 面向过程&#xff1a;POP(Process-oriented programming) 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 ​…

d3.js 教程 模仿echarts legend功能

上一节记录没有加上echarts的legend功能&#xff0c;这一小节补一下。 1. 数据 我们可以从echarts中看出&#xff0c;折线数据并不是我们传进入的原始数据&#xff08;多数情况下我们也不会修改原始数据&#xff09;&#xff0c;而是原始数组的一个备份而已。备份数组的方法有很…

小程序2-基本架构讲解(一)WXSS样式

项目里边生成了不同类型的文件: .json 后缀的 JSON 配置文件.wxml 后缀的 WXML 模板文件.wxss 后缀的 WXSS 样式文件.js 后缀的 JS 脚本逻辑文件WXSS 样式 WXSS (WeiXin Style Sheets)是一套样式语言&#xff0c;用于描述 WXML 的组件样式。WXSS 具有 CSS 大部分的特性 新增了尺…

js高级—tab栏切换(面向对象做法)

<main><h4>Js 面向对象 动态添加标签页</h4><div class"tabsbox" id"tab"><!-- tab 标签 --><nav class"fisrstnav"><ul><li class"liactive"><span>测试1</span><sp…

Win10卸载python总是提示error2503失败各种解决办法

最近win10的电脑装了python的3.4&#xff0c;然后想卸载&#xff0c;就总是提示error 2053&#xff0c;类似于这种&#xff1a; 下面是我的坎坷解决之路&#xff1a; 1、网上说&#xff0c;任务管理器 --> 详细信息 --> explorer.exe结束任务&#xff0c;结束资源管理器&…

js高级—查询商品案例

<div class"search">按照价格查询&#xff1a;<input type"text" class"start"> - <input type"text" class"end"><button class"search-price">搜索</button> 按照商品名称查询&a…

js高级第二天

构造函数和原型 构造函数和原型 在典型的OOP 的语言中&#xff08;如Java&#xff09;&#xff0c;都存在类的概念&#xff0c;类就是对象的模板&#xff0c;对象就是类的实例&#xff0c;但在ES6之前&#xff0c;JS 中并没用引入类的概念。ES6&#xff0c;全称ECMAScript6.0…

操作系统原理之文件系统(第五章)

一、文件 1、⽂件系统的⽤户接⼝包括⽂件的命名、类型、属性和对⽂件的操作 2、⽂件命名&#xff1a;所有操作系统都允许⽤1&#xff5e;8个字⺟组成的字符串 3、⽂件扩展名&#xff1a;多数操作系统都⽀持⽂件名⽤圆点隔开分为两部分&#xff0c;圆点后⾯的部分称为⽂件扩展名…

js高级第三天

原型链 作用&#xff1a;提供一个成员的查找机制&#xff0c;或者查找规则含义&#xff1a;由原型所串联起来的链装结构JavaScript 的成员查找机制(规则) 当访问一个对象的属性&#xff08;包括方法&#xff09;时&#xff0c;首先查找这个对象自身有没有该属性。如果没有就查…

为什么大学的计算机老师技术那么厉害,却不愿意当程序员?

不知道大家有多少是从事跟计算机有关的工作的&#xff0c;每次想到大学时的计算机考试&#xff0c;都能令小小编心惊胆战呀&#xff0c;各式代码和计算机语言&#xff0c;真的是很令人头痛了。不过呢&#xff0c;也有很多大神&#xff0c;大学学着其他的专业&#xff0c;却在毕…

DDG全家桶之3022

本篇文章主要根据360Netlab新出的DDG分析文档来复现新变种3022&#xff0c;会涉及部分分析和清除的方法&#xff0c;本篇文章只用于学习交流&#xff0c;为广大受害者提供清除思路 &#xff0c;请勿用于非法用途&#xff0c;产生一切后果与作者无关 详情请参考文档&#xff1a;…

js高级第四天

课程回顾&#xff1a; ​ 原型链&#xff1a;由原型构成链状结构&#xff0c;提供成员查找机制 ​ 继承&#xff1a;组合继承&#xff1a;构造函数和原型对象 ​ 属性&#xff1a;调用父构造函数的时候用call改变this指向 ​ 方法&#xff1a;父实例对象赋值给子原型对象&a…