放大器实现

作者: 丶chlorine | 来源:发表于2017-12-06 23:49 被阅读0次

经常逛某宝可以发现,查看商品时都有如下的放大功能,鼠标放到图片上可以看到图片的细节,那么它是如何实现的呢?是真的将图片放大了吗?这篇文章就是讲述这个放大器是如何实现的。


原理

放大器其实并不是真的将图片放大了。
假如是原图片放大,那么放大后势必会出现一定程度的模糊,而我们平时所看到的,放大后反而更清晰了。
所以这两张图并不相同,一个是缩略图,另一个则是前者的高清放大版
当鼠标放在左侧盒子上时,使遮罩和右侧“放大“图片显示,鼠标移动,带着遮罩随之移动,并使右侧图片等比例进行相应移动,显示出对应的放大后的 局部位置。
当遮罩层向下移动的时候,这个时候大图等比例向上移动,就会显示对应的局部放大区域。然后把溢出的部分隐藏即可达到放大效果。

放大器demo如下:

实现

要实现上面demo中的放大器,首先你得准备两张图,一张正常大小,另一张高清放大版。

html结构比较简单:

<div class="box1">
    <img src="./Images/small.jpg">
    <div class="mask"></div>
</div>
<div class="box2">
    <img src="./Images/big.jpg">
</div>

css部分就不给出了,无非是给盒子设宽高,调一下边距什么的,这里只注意一点:

  • 左侧盒子宽高和右侧一定是成比例的

什么意思呢?
要使放大的区域与左侧遮盖的区域一样,那么左右宽高需要保持相同的比例,相信这一点不难理解。

在这里,遮罩宽高为200px,缩略图为400px,显示区域为450px,原图为900px(上图所画原图大小仅做参考)
以宽为例:
遮盖的宽 / 缩略图的宽 = 显示区域的宽 / 原图的宽。
样式设置好了,宽高也就位了,怎么让图片动起来呢?
第一步:先让遮罩动起来
代码如下:

box1.onmousemove = function(event) {
...
var x = event.pageX - box1.offsetLeft - mask.offsetWidth/2;
var y = event.pageY - box1.offsetTop - mask.offsetHeight/2;
...
}

用 event.pageX减去box1.offsetLeft再减去遮罩的半宽,就得到遮罩的左侧与盒子间的距离,如下图:
(如若对pageX , offsetLeft 等不太清楚,可以参考:JS坐标获取

再对x进行约束,使遮罩无法移出边框,最后将x赋值给left:

...
mask.style.left = x + "px";
mask.style.top = y + "px";
...

这样每次鼠标移动就会更新遮罩的left、top值,使得遮罩移动起来。
第二步:等比例移动右侧大图
先求得小图和大图的比例关系,再乘上x就是大图要移动的距离。

...
var scale = box2.offsetHeight/mask.offsetHeight;
var xx = x*scale;
var yy = y*scale;
img.style.marginLeft = -xx + "px";
img.style.marginTop = -yy + "px";

这样这个放大器就基本实现了,当鼠标移动时,遮罩跟随移动,同时右侧大图等比例移动,达到放大的效果。
最后补充一个在线工具调整图片尺寸,个人觉得比较方便实用。

关于

相关文章

  • 放大器实现

    经常逛某宝可以发现,查看商品时都有如下的放大功能,鼠标放到图片上可以看到图片的细节,那么它是如何实现的呢?是真的将...

  • 电路入门之——运算放大器

    运算放大器是一种可以进行数学运算的放大电路。运算放大器不仅可以通过增大或减小模拟输入信号来实现放大,还可以进行加减...

  • 伺服放大器是什么?

    伺服放大器是什么?伺服驱动器(servodrives)又称为“伺服控制器”、“伺服放大器”,伺服放大器是用来控制伺...

  • 非反相闭环放大器

    如下图,假设这个闭环放大器使用理想的运算放大器,则因为其开环增益为无限大,所以运算放大器的两输入端电压差几乎为零,...

  • 如何理解集成运放的同相反相输入端

    集成运放的符号: 集成运放的基本运用:反相放大器、同相放大器 反相放大器在基本运放的基础上加入了反馈电阻R2,由于...

  • 理想运算放大器理论

    在国外的一本关于运算放大器的应用的书《运算放大器权威指南》上看到了一篇有意思的文章,标题是一个理想运算放大器可以毁...

  • 更专注,更聚焦,方能更极致

    1.人生蓝图作为人生资源的放大器,能够助力我们更好地实现自我升级;鉴别人生蓝图的途径:我喜欢的、我擅长的、社会需要...

  • 关于平台

    听过一句话:“平台是能力的放大器。”进入对的平台里工作,往往能事半功倍,能实现自身价值最大化。平台是展现能力...

  • 放大器

    震惊!思维定势竟是模电之旅中的拦路虎…… 魔 魔 魔 •模电• 魔 魔 魔 魔 魔电虐我千百遍 我待模电如...

  • 反馈学习心得(一)

    1.负反馈的类型 1.1根据放大器输入信号与输出信号的不同划分 ① 电压放大器(输入输出信号皆为电压信...

网友评论

    本文标题:放大器实现

    本文链接:https://www.haomeiwen.com/subject/zmblixtx.html