找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
积分等级发帖收益的说明江阴论坛帮助汇总江阴论坛管理规则(必看)江阴论坛版主招聘中江阴论坛已运行
查看: 1753|回复: 0

[技术分享] 放大镜 - 放大倍率和视窗尺寸

[复制链接]
发表于 2010-5-18 13:56:03 | 显示全部楼层 |阅读模式
  1. /**
  2. * 获取放大镜放大倍数
  3. * @param thumb                缩略图对象
  4. * @param glass                镜片对象
  5. * @return                         放大镜放大倍数
  6. */
  7. function getMultiple(thumb, glass) {
  8.         var multiple = {
  9.                 horizontal:0,
  10.                 vertical:0
  11.         };

  12.         var thumbSize = getSize(thumb);
  13.         var imageSize = getImageSize(image);

  14.         multiple.horizontal = imageSize.width / thumbSize.width;
  15.         if(multiple.horizontal <= 1) {
  16.                 multiple.horizontal = 1;
  17.         }

  18.         multiple.vertical = imageSize.height / thumbSize.height;
  19.         if(multiple.vertical <= 1) {
  20.                 multiple.vertical = 1;
  21.         }

  22.         return multiple;
  23. }
复制代码
原图和缩略图是固定的. 而为了统一视觉感官和防止破页, 我们一般也会指定视窗的尺寸, 所以镜片的尺寸是根据其他几个对象计算出来的.
镜片 = 缩略图x视窗/原图 = 缩略图/倍率
  1. /**
  2. * 加载镜片的样式
  3. * @param viewportSize        视窗尺寸
  4. * @param multiple                倍率
  5. * @param glass                        镜片对象
  6. */
  7. function loadGlassStyle(viewportSize, multiple, glass) {
  8.         glass.style.width = round(viewportSize.width / multiple.horizontal) + 'px';
  9.         glass.style.height = round(viewportSize.height / multiple.vertical) + 'px';
  10. }
复制代码
如果定义的视窗的宽或高比原图还要小, 那该如何显示?
需要改变视窗的尺寸. 假设原图是 240x180, 视窗原定尺寸是 200x200. 视窗尺寸随之改变为 200x180. 此时镜片的尺寸仍须与视窗成正比.

javaScript,magnifier,multiple,viewport,glass,thumb

如果倍率小于 1, 又该如何显示?
将倍率设为 1, 镜片覆盖整个缩略图, 显示整个原图为视窗内容; 或者不作操作 (禁止放大镜效果).

javaScript,magnifier,multiple,viewport,glass,thumb

下面的代码用于获取视窗的尺寸.

  1. /**
  2. * 返回视窗尺寸
  3. * @param multiple                倍率
  4. * @param image                        原图对象
  5. * @return                                视窗尺寸
  6. */
  7. getViewportSize: function(multiple, image) {
  8.         var dimension = {
  9.                 width:0,
  10.                 height:0
  11.         };

  12.         // 如果倍率小于 1 或者视窗比原图还宽, 宽度设为跟原图一致, 否则去设定宽度
  13.         if(multiple.horizontal <= 1 || config.viewportSize[0] > image.width) {
  14.                 dimension.width = image.width;
  15.         } else {
  16.                 dimension.width = config.viewportSize[0];
  17.         }

  18.         // 如果倍率小于 1 或者视窗比原图还高, 高度设为跟原图一致, 否则去设定高度
  19.         if(multiple.vertical <= 1 || config.viewportSize[1] > image.height) {
  20.                 dimension.height = image.height;
  21.         } else {
  22.                 dimension.height = config.viewportSize[1];
  23.         }

  24.         return dimension;
  25. }
复制代码
原文:http://www.neoease.com/javascrip ... -and-viewport-size/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|江阴人家

GMT+8, 2024-4-27 04:17 , Processed in 0.018290 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表