原生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 相关文章推荐
JS调用页面表格导出excel示例代码
Mar 18 Javascript
JS中的Replace方法使用经验分享
May 20 Javascript
JavaScript检测字符串中是否含有html标签实现方法
Jul 01 Javascript
jQuery基于cookie实现的购物车实例分析
Dec 24 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
Dec 23 Javascript
react.js 翻页插件实例代码
Jan 19 Javascript
JSON与js对象序列化实例详解
Mar 16 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
JavaScript设计模式之代理模式实例分析
Jan 16 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
Sep 01 Javascript
vue脚手架项目创建步骤详解
Mar 02 Vue.js
Javascript中Microtask和Macrotask鲜为人知的知识点
Apr 02 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解析url的三个示例
2014/01/20 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
浅析Python中字符串的intern机制
2020/10/03 Python
《云房子》教学反思
2014/04/20 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
国庆庆典邀请函
2015/02/02 职场文书
个人德育工作总结
2015/03/05 职场文书
团拜会主持词
2015/07/04 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL