原生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经典效果集锦
Jul 06 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
Nov 22 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
Dec 29 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
Dec 07 Javascript
浅析javascript函数表达式
Feb 10 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
Apr 28 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
Vue修改mint-ui默认样式的方法
Feb 03 Javascript
微信开发之微信jssdk录音功能开发示例
Oct 22 Javascript
element-ui table组件如何使用render属性的实现
Nov 04 Javascript
Echarts实现多条折线可拖拽效果
Dec 19 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
2014/10/23 Python
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
Django中间件实现拦截器的方法
2018/06/01 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
浅析Python requests 模块
2020/10/09 Python
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
化学教师教学反思
2014/01/17 职场文书
青年文明号创建承诺
2014/03/31 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python