对于JavaScript放大镜,需要计算放大率。在一个完整的放大镜结构中,有四个与放大相关的对象,即原件、缩略图、镜头和窗口。镜头在缩略图上的覆盖位置实际上是原物按窗口的部分显示,所以它们有以下关系。放大率=原件/缩略图=窗口/镜头。
放大倍数一般大于等于1,因为原始图像一般不会小于缩略图。一旦放大率小于1,放大率被设置为1。因为缩略图和原始图像的大小是不变的,所以我们用它们来获得放大倍数。复制代码如下: /** *获取放大镜倍率* @param thumb缩略图对象* @param glass镜头对象* @返回倍率*/函数获取倍数(thumb,Glass){ var Multiple={横:0,竖33600 };var拇指大小=getSize(拇指);var imageSize=getImageSize(图像);multiple . horizontal=imagesize . width/thumb size . width;if(multiple . horizontal=1){ multiple . horizontal=1;} multiple . vertical=imagesize . height/拇指大小. height;if(multiple . vertical=1){ multiple . vertical=1;}返回多个;}原始绘图和缩略图已修复。为了统一视觉,防止断页,我们通常会指定窗口的大小。因此,镜头尺寸是根据其他几个物体来计算的。镜头=缩略图x窗口/原图=缩略图/放大率复制代码如下: /** *加载镜头样式* @param viewportSize窗口大小* @param倍数放大率* @param glass镜头对象*/函数loadGlassStyle(viewportSize,multiple,glass){ glass . style . width=round(viewport size . width/multiple . horizontal)' px ';glass . style . height=round(viewportsize . height/multiple . vertical)' px ';}如果定义的窗口宽度或高度小于原始图像,应该如何显示?有必要改变窗户的大小。假设原始图片为240x180,窗口原始大小为200x200。窗口大小更改为200x180。此时,镜头的大小仍必须与窗口成正比。。
如果放大倍数小于1,应该如何显示?将放大倍数设置为1,用镜头覆盖整个缩略图,将整个原始图像显示为窗口内容;或者什么都不做(禁止放大镜效应)。。
下面的代码用于获取窗口大小。复制代码如下: /** *返回窗口大小* @param倍数放大率* @param图像原始对象* @返回窗口大小*/getviewportsize3360函数(倍数,图像){var dimension={width:0,height 33600 };//如果放大倍数小于1或窗口比原始图像宽,则宽度设置为与原始图像一致;否则,设置宽度if(倍数。水平=1 | |配置。viewport size[0]image . width){ dimension . width=image . width;} else { dimension . width=config . viewport size[0];}//如果放大倍数小于1或窗口高于原始图像,则高度设置为与原始图像一致;否则,设置高度if(倍数。垂直=1 | |配置。viewport size[1]image . height){ dimension . height=image . height;} else { dimension . height=config . viewport size[1];}返回维度;}上一节《JavaScript 放大镜- 移动镜片》,我们实现了镜头在缩略图上的移动效果,留下了问题:‘镜头有边框时,如何保证边框不影响镜头的移动精度?’为了防止镜头被框架偏移,可以通过为镜头对象设置等于框架宽度的负边距值来消除偏移。这一部分没有DEMO,但对于后面的部分非常重要。请找出正常和异常情况下的刻度转换。还有,课后留个问题。舍入方法出现在本文的代码中,这是一种舍入方法。如果你想自己实现这个功能,你会怎么做?(Tip :可以参考计算机图形学中的线混叠处理方法。)