jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)


Posted in Javascript onMarch 05, 2016

本文实例讲述了jQuery实现滚动鼠标放大缩小图片的方法。分享给大家供大家参考,具体如下:

在项目制作过程中,遇到了这么一个需求,就开发了一个,记录一下。

首先,需要定义html元素和css样式:

<div style="position:relative;">
<asp:Image ID="myImg" runat="server" Width="670px" />
<span style="position:relative;display:none; background:wheat;border:1px solid gray;padding:3px;overflow:hidden;" id="NotificationMsg">滚动鼠标中键,可以放大或者缩小图片</span>
</div>

在这个样式中,我设置了图片的样式为670px,目的就是避免图片过大的时候,显示到了页面外部的现象。

然后我使用了一个jquery mousewheel 的插件来解决鼠标中键的滚动问题,下面是具体的jquery操作代码:

<script type="text/javascript">
$(document).ready(function() {
  var count = 0;
  $("#ctl00_ContentPlaceHolder1_myImg").hover(function(e) {
      var left = e.originalEvent.x || e.originalEvent.layerX || 0; //get the left position
      var top = e.originalEvent.y || e.originalEvent.layerY || 0;  //get the top position
      $("#NotificationMsg").css({ 'position': 'absolute', 'left': left, 'top': top });
      $("#NotificationMsg").css("display", "block");
  }, function() {
    //alert('mouserout');
    $("#NotificationMsg").css("display", "none");
  }).mousewheel(function(event, delta, deltaX, deltaY) {
    count++;
    var height = $(this).attr("height");  //get initial height 
    var width = $(this).attr("width");   // get initial width
    var stepex = height / width;  //get the percentange of height / width
    var minHeight = 150;  // min height
    var tempStep = 50;  // evey step for scroll down or up
    $(this).removeAttr('style');
    if (delta == 1) { //up
      $(this).attr("height", height + count * tempStep);
      $(this).attr("width", width + count * tempStep / stepex);
    }
    else if (delta == -1) { //down
      if (height > minHeight)
        $(this).attr("height", height - count * tempStep);
      else
        $(this).attr("height", tempStep);
      if (width > minHeight / stepex)
        $(this).attr("width", width - count * tempStep / stepex);
      else
        $(this).attr("width", tempStep / stepex);
    }
    event.preventDefault();
    count = 0;
  });
});
</script>

在这段代码中,利用了originalEvent函数来获取鼠标所处的位置,在IE9和firefox下面测试是可以使用的:

var left = e.originalEvent.x || e.originalEvent.layerX || 0; //get the left position
var top = e.originalEvent.y || e.originalEvent.layerY || 0;  //get the top position

然后在代码中,我进行了如下的操作来确定图片的初始高度和宽度以及图片显示的宽高比(目的是实现等比例缩放):

var height = $(this).attr("height");  //get initial height 
var width = $(this).attr("width");   // get initial width
var stepex = height / width;  //get the percentange of height / width
var minHeight = 150;  // min height
var tempStep = 50;  // every step for scrolling down or up
$(this).removeAttr('style');

其中,tempStep主要是为了实现滚动的时候,能够进行缩小和放大的比率值。做了这之后,我移除了image的width样式,主要是为了实现放大或者缩小。

if (delta == 1) { //up
  $(this).attr("height", height + count * tempStep);
  $(this).attr("width", width + count * tempStep / stepex);
}
else if (delta == -1) { //down
  if (height > minHeight)
    $(this).attr("height", height - count * tempStep);
  else
    $(this).attr("height", tempStep);
  if (width > minHeight / stepex)
    $(this).attr("width", width - count * tempStep / stepex);
  else
    $(this).attr("width", tempStep / stepex);
}
event.preventDefault();
count = 0;

上面这段就比较简单了,主要是进行上下滚动判断,然后等比例放大或者缩小图片。event.preventDefault()可以保证在滚动图片的过程中,页面不会随之滚动。

下面附上这个插件:

点击此处本站下载。

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
AngularJS Bootstrap详细介绍及实例代码
Jul 28 Javascript
利用vue实现模态框组件
Dec 19 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
Feb 20 Javascript
js中字符型和数值型数字的互相转化方法(必看)
Apr 25 Javascript
基于bootstrop常用类总结(推荐)
Sep 11 Javascript
JS实现为动态创建的元素添加事件操作示例
Mar 17 Javascript
js input输入百分号保存数据库失败的解决方法
May 26 Javascript
详解vue 路由跳转四种方式 (带参数)
Apr 28 Javascript
15分钟学会vue项目改造成SSR(小白教程)
Dec 17 Javascript
JavaScript实现打砖块游戏
Feb 25 Javascript
结合axios对项目中的api请求进行封装操作
Sep 21 Javascript
vue选项卡切换的实现案例
Apr 11 Vue.js
js控制TR的显示隐藏
Mar 04 #Javascript
Node.js操作Firebird数据库教程
Mar 04 #Javascript
实例剖析AngularJS框架中数据的双向绑定运用
Mar 04 #Javascript
node.js微信公众平台开发教程
Mar 04 #Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
Mar 04 #Javascript
深入学习AngularJS中数据的双向绑定机制
Mar 04 #Javascript
简单的jQuery banner图片轮播实例代码
Mar 04 #Javascript
You might like
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
获取远程文件大小的php函数
2010/01/11 PHP
Smarty Foreach 使用说明
2010/03/23 PHP
php小偷相关截取函数备忘
2010/11/28 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
理解Javascript_03_javascript全局观
2010/10/11 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
Python 数据结构之旋转链表
2017/02/25 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
我的求职计划书
2014/01/10 职场文书
店面销售职位的职责
2014/03/09 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
2015年防汛工作总结
2015/05/15 职场文书
辩论赛新闻稿
2015/07/17 职场文书
2016高考寄语集锦
2015/12/04 职场文书
Python进度条的使用
2021/05/17 Python
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js