原生js简单实现放大镜特效


Posted in Javascript onMay 16, 2017

本文实例为大家分享了js实现放大镜特效展示的具体代码,供大家参考,具体内容如下

普及知识:放大镜特效涉及到的几个值

offsetWidth    获取元素的宽度
offsetHeight  获取元素的高度
offsetLeft父元素没有定位时,获取元素距离页面的左边距,父元素有定位时,获取元素距离父元素的左边距
offsetTop父元素没有定位时,获取元素距离页面的上边距,父元素有定位时,获取元素距离父元素的上边距
scrollTop  内容滚动的上边距
scrollLeft 内容滚动的左边距
onmousemove  鼠标移动事件
onmouseover  鼠标划过事件

主要思路:

    1.鼠标移动,阴影区跟着移动
    2.鼠标移动,大图也跟着移动
    3.阴影区域与小图的比例 以及 大图显示区域与大图的比例 是一样的
    4.保证阴影区域以及大div.big在鼠标移动到div.small时显示

html实现

<div id="fangdajing">
    <div class="small">
      <img src="small.jpg" alt="">
      <div class="shadow"></div>
    </div>
    <div class="big">
      <img src="big.jpg" alt="">
    </div>
  </div>

css样式

//定位,大图显示区域和阴影区域最开始不显示
#fangdajing{
      width:450px;
      height:450px;
      position:relative;
    }
    .small{
      width:450px;
      height:450px;
      position:absolute;
      left:0px;
      top:0px;
    }
    .shadow{
      width:200px;
      height:200px;
      background:yellow;
      opacity:0.3;
      position:absolute;
      top:0;
      left:0;
      display:none;
    }
    .big{
      position:absolute;
      left:450px;
      width:356px;
      height:356px;
      overflow:hidden;
      display:none;
    }

js实现

1.获取对象

var fdj = document.getElementById('fangdajing');
var big = document.getElementsByClassName('big')[0];
var small = document.getElementsByClassName('small')[0];
var shadow = document.getElementsByClassName('shadow')[0];

2.鼠标的移入移出事件,当鼠标移入的时候,显示大图显示区以及阴影区域

small.onmouseover = function(){
        big.style.display = 'block';
        shadow.style.display = 'block';
  }

3.

(1)鼠标移动,div.shadow跟着移动,先获取到shadow在small内的相对位置,已知鼠标点击位置距离页面的边距,fdj距离页面的边距,fdj以及shadow的宽高,让鼠标划过的位置一直位于shadow区域的中心点,所以可得shadow在small内的相对位置,之后进行判断,让shadow不能出边界,最后进行赋值操作

(2)shadow区域移动,大图显示相应的位置,即大图滚动相应的距离,大图和shadow的比例为big.offsetWidth/shadow.offsetWidth,以shadow的左上角为准,大图的滚动距离为left*相应比例

small.onmousemove = function(ent){
    var e = ent || event;  //获取鼠标事件对象
    var left = e.pageX - fdj.offsetLeft - shadow.offsetWidth/2; //获取shadow在small内的相对位置
    var top = e.pageY - fdj.offsetTop - shadow.offsetHeight/2;
    var tw = fdj.offsetWidth - shadow.offsetWidth; //获取shadow最大可移动距离
    var th = fdj.offsetHeight - shadow.offsetHeight; 
    //对shadow进行限制
    if(left < 0){
      left = 0;      
    }else if(left > tw){
      left = tw;
    }
     if(top < 0){
      top = 0;      
    }else if(top > th){
      top = th;
    } 
    //赋值
    small.style.left = left + 'px';
    small.style.top = top + 'px';    
    //大图跟着移动
    var sl = left * big.offsetWidth / shadow.offsetWidth;
    var st = top * big.offsetHeight / shadow.offsetHeight;
    big.scrollTop = st;
    big.scrollLeft = sl; 
  }

4.鼠标移出,大图以及shadow隐藏

small.onmouserout = function(){
    big.style.display = 'none';
    shadow.style.display = 'none';    
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 数组排序函数
Aug 20 Javascript
jquery加载页面的方法(页面加载完成就执行)
Jun 21 Javascript
一个JQuery操作Table的代码分享
Mar 30 Javascript
CSS(js)限制页面显示的文本字符长度
Dec 27 Javascript
window.open的页面如何刷新(父页面)上层页面
Dec 28 Javascript
jquery如何改变html标签的样式(两种实现方法)
Jan 16 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
Feb 20 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
Oct 02 Javascript
利用Javascript仿Excel的数据透视分析功能
Sep 07 Javascript
微信小程序实现简单input正则表达式验证功能示例
Nov 30 Javascript
Vue.use源码学习小结
Jun 20 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
Aug 12 Javascript
javascript 中iframe高度自适应(同域)实例详解
May 16 #Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
May 30 #Javascript
Vue.js tab实现选项卡切换
May 16 #Javascript
Vue.js手风琴菜单组件开发实例
May 16 #Javascript
Bootstrap fileinput文件上传预览插件使用详解
May 16 #Javascript
js自定义瀑布流布局插件
May 16 #Javascript
简单实现js点击展开二级菜单功能
May 16 #Javascript
You might like
PHP高自定义性安全验证码代码
2011/11/27 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
看了就知道什么是JSON
2007/12/09 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
node.js require() 源码解读
2015/12/13 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
Python正则表达式匹配HTML页面编码
2015/04/08 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
Django获取应用下的所有models的例子
2019/08/30 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
html5.2 dialog简介详解
2018/02/27 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
庆元旦迎新年广播稿
2014/02/18 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python