原生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 12 Javascript
Javascript valueOf 使用方法
Dec 28 Javascript
jquery子元素过滤选择器使用示例
Jun 24 Javascript
jquery 定位input元素的几种方法小结
Jul 28 Javascript
Javascript实现视频轮播在pc端与移动端均可
Sep 29 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
Mar 21 Javascript
JavaScript对象引用与赋值实例详解
Mar 15 Javascript
AngularJS 最常用的八种功能(基础知识)
Jun 26 Javascript
js实现可以点击收缩或张开的悬浮窗
Sep 18 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
Apr 20 Javascript
vue路由守卫及路由守卫无限循环问题详析
Sep 05 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
Jul 16 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+MYSQL中文乱码问题
2015/07/01 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
JavaScript—window对象使用示例
2013/12/09 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
Less 安装及基本用法
2018/05/05 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
详解Python打包分发工具setuptools
2019/08/05 Python
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
影视动画专业个人的自我评价
2013/12/31 职场文书
关于母亲节的感言
2014/02/04 职场文书
员工考核评语大全
2014/04/26 职场文书
中学生英语演讲稿
2014/04/26 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
2015年招聘工作总结
2014/12/12 职场文书
个人德育工作总结
2015/03/05 职场文书
工作年限证明范本
2015/06/15 职场文书
图书借阅制度范本
2015/08/06 职场文书
执行力心得体会范文
2016/01/11 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL