原生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 学习笔记(五)
Dec 31 Javascript
JavaScript实现简单的时钟实例代码
Nov 23 Javascript
在AngularJS应用中实现一些动画效果的代码
Jun 18 Javascript
jQuery实现图片左右滚动特效
Apr 20 Javascript
javascript事件处理模型实例说明
May 31 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
Dec 08 Javascript
vue实现app页面切换动画效果实例
May 23 Javascript
js用类封装pop弹窗组件
Oct 08 Javascript
vue项目中使用百度地图的方法
Jun 08 Javascript
详解关于vue-area-linkage走过的坑
Jun 27 Javascript
微信小程序 自定义复选框实现代码实例
Sep 04 Javascript
详解Vue中的自定义指令
Dec 07 Vue.js
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
Laravel 5框架学习之环境与配置
2015/04/08 PHP
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
Ajax 数据请求的简单分析
2011/04/05 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
vue.js 使用axios实现下载功能的示例
2018/03/05 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
python实现端口转发器的方法
2015/03/13 Python
python实现逆波兰计算表达式实例详解
2015/05/06 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
python读取并写入mat文件的方法
2019/07/12 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
学院书画协会部门岗位职责
2013/12/01 职场文书
中国梦的演讲稿
2014/01/08 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书