最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript放大镜移动镜片效果代码_javascript技巧

来源:动视网 责编:小采 时间:2020-11-27 20:59:09
文档

JavaScript放大镜移动镜片效果代码_javascript技巧

JavaScript放大镜移动镜片效果代码_javascript技巧:放大镜并不是一个难以实现的效果, 只是因为牵涉到一些精确的数值计算, 显得比较繁琐. 在未来的一段日子, 我会不定期地写关于 JavaScript 放大镜系列的文章, 每次讲一个点, 由点及面, 最后完成整个效果. 本次我们先了解如何在缩略图上移动镜片. (这是 DE
推荐度:
导读JavaScript放大镜移动镜片效果代码_javascript技巧:放大镜并不是一个难以实现的效果, 只是因为牵涉到一些精确的数值计算, 显得比较繁琐. 在未来的一段日子, 我会不定期地写关于 JavaScript 放大镜系列的文章, 每次讲一个点, 由点及面, 最后完成整个效果. 本次我们先了解如何在缩略图上移动镜片. (这是 DE
 放大镜并不是一个难以实现的效果, 只是因为牵涉到一些精确的数值计算, 显得比较繁琐. 在未来的一段日子, 我会不定期地写关于 JavaScript 放大镜系列的文章, 每次讲一个点, 由点及面, 最后完成整个效果.
本次我们先了解如何在缩略图上移动镜片. (这是 DEMO)

缩略图和镜片组成的 DOM 结构如下.
代码如下:





我在缩略图容器中放置图片和镜片节点, 以缩略图容器作为相对位置参考, 在触发 mousemove 事件时修改镜片的位置. 换个说法, 我们要解决的问题是, 算出镜片左上角的在缩略图容器中的位置. 计算镜片位移的 JavaScript 代码如下.
代码如下:
/**
* 获取镜片在放大目标元素上的位置
* @param ev 触发的事件
* @param thumb 缩略图对象
* @param glass 镜片对象
* @return x:镜片在放大目标元素上的横向位置, y:镜片在放大目标元素上的纵向位置
*/
function getGlassOffset(ev, thumb, glass) {
var offset = {
left:0,
top:0
};

// 偏移量
var thumbOffset = getCumulativeOffset(thumb);
// 鼠标在页面上的位置
var mousePoint = getMousePoint(ev);
// 镜片实际尺寸
var glassSize = getSize(glass);
// 简缩图实际尺寸
var thumbSize = getSize(thumb);

// 光标横向位置
var cursorX = mousePoint.x - thumbOffset.left;
// 镜片横向偏移量
offset.left = cursorX - glassSize.width / 2;
if(offset.left < 0) {
offset.left = 0;
} else if(offset.left > thumbSize.width - glassSize.width) {
offset.left = thumbSize.width - glassSize.width;
}

// 光标纵向位置
var cursorY = mousePoint.y - thumbOffset.top;
// 镜片纵向偏移量
offset.top = cursorY - glassSize.height / 2;
if(offset.top < 0) {
offset.top = 0;
} else if(offset.top > thumbSize.height - glassSize.height) {
offset.top = thumbSize.height - glassSize.height;
}

return offset;
}

镜片左上角在缩略图容器中的位置 = 鼠标位置 - 缩略图左上角位置 - 镜片尺寸的一半
当镜片在容器外, 将镜片靠边. 全部代码请窥视 DEMO. (知道我为何上一篇写通过 JS 获取鼠标位置了吧?)

留个课后思考题, 当镜片带边框时, 如何保证边框不影响镜片移动时的精确度?

文档

JavaScript放大镜移动镜片效果代码_javascript技巧

JavaScript放大镜移动镜片效果代码_javascript技巧:放大镜并不是一个难以实现的效果, 只是因为牵涉到一些精确的数值计算, 显得比较繁琐. 在未来的一段日子, 我会不定期地写关于 JavaScript 放大镜系列的文章, 每次讲一个点, 由点及面, 最后完成整个效果. 本次我们先了解如何在缩略图上移动镜片. (这是 DE
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top