|
- /**
- * 获取放大镜放大倍数
- * @param thumb 缩略图对象
- * @param glass 镜片对象
- * @return 放大镜放大倍数
- */
- function getMultiple(thumb, glass) {
- var multiple = {
- horizontal:0,
- vertical:0
- };
-
- var thumbSize = getSize(thumb);
- var imageSize = getImageSize(image);
-
- multiple.horizontal = imageSize.width / thumbSize.width;
- if(multiple.horizontal <= 1) {
- multiple.horizontal = 1;
- }
-
- multiple.vertical = imageSize.height / thumbSize.height;
- if(multiple.vertical <= 1) {
- multiple.vertical = 1;
- }
-
- return multiple;
- }
复制代码 原图和缩略图是固定的. 而为了统一视觉感官和防止破页, 我们一般也会指定视窗的尺寸, 所以镜片的尺寸是根据其他几个对象计算出来的.
镜片 = 缩略图x视窗/原图 = 缩略图/倍率- /**
- * 加载镜片的样式
- * @param viewportSize 视窗尺寸
- * @param multiple 倍率
- * @param glass 镜片对象
- */
- function loadGlassStyle(viewportSize, multiple, glass) {
- glass.style.width = round(viewportSize.width / multiple.horizontal) + 'px';
- glass.style.height = round(viewportSize.height / multiple.vertical) + 'px';
- }
复制代码 如果定义的视窗的宽或高比原图还要小, 那该如何显示?
需要改变视窗的尺寸. 假设原图是 240x180, 视窗原定尺寸是 200x200. 视窗尺寸随之改变为 200x180. 此时镜片的尺寸仍须与视窗成正比.
javaScript,magnifier,multiple,viewport,glass,thumb
如果倍率小于 1, 又该如何显示?
将倍率设为 1, 镜片覆盖整个缩略图, 显示整个原图为视窗内容; 或者不作操作 (禁止放大镜效果).
javaScript,magnifier,multiple,viewport,glass,thumb
下面的代码用于获取视窗的尺寸.
- /**
- * 返回视窗尺寸
- * @param multiple 倍率
- * @param image 原图对象
- * @return 视窗尺寸
- */
- getViewportSize: function(multiple, image) {
- var dimension = {
- width:0,
- height:0
- };
-
- // 如果倍率小于 1 或者视窗比原图还宽, 宽度设为跟原图一致, 否则去设定宽度
- if(multiple.horizontal <= 1 || config.viewportSize[0] > image.width) {
- dimension.width = image.width;
- } else {
- dimension.width = config.viewportSize[0];
- }
-
- // 如果倍率小于 1 或者视窗比原图还高, 高度设为跟原图一致, 否则去设定高度
- if(multiple.vertical <= 1 || config.viewportSize[1] > image.height) {
- dimension.height = image.height;
- } else {
- dimension.height = config.viewportSize[1];
- }
-
- return dimension;
- }
复制代码 原文:http://www.neoease.com/javascrip ... -and-viewport-size/ |
|