原生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的类型简单说明
Sep 03 Javascript
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
Aug 23 Javascript
js日期、星座的级联显示代码
Jan 23 Javascript
node.js中的fs.readdirSync方法使用说明
Dec 17 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
Angularjs全局变量被作用域监听的正确姿势
Feb 06 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
Apr 19 Javascript
浅谈如何实现easyui的datebox格式化
Jun 12 Javascript
jQuery中deferred对象使用方法详解
Jul 14 Javascript
bootstrap弹出层的多种触发方式
May 10 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
Apr 04 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
Apr 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之sprintf函数用法详解
2014/11/12 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
jQuery 使用手册(七)
2009/09/23 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
json 实例详细说明教程
2009/10/31 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
2015/09/05 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
Python里隐藏的“禅”
2014/06/16 Python
python处理xml文件的方法小结
2017/05/02 Python
多版本Python共存的配置方法
2017/05/22 Python
解决Mac下使用python的坑
2019/08/13 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
12岁生日感言
2014/01/21 职场文书
班主任工作实习计划
2015/01/16 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
导游词之临安白水涧
2019/11/05 职场文书
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技