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 相关文章推荐
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
Sep 27 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
Dec 11 Javascript
21个值得收藏的Javascript技巧
Feb 04 Javascript
jQuery实现鼠标滑过点击事件音效试听
Aug 31 Javascript
jQuery检查元素存在性(推荐)
Sep 17 Javascript
vue与TypeScript集成配置最简教程(推荐)
Oct 17 Javascript
Vue之Vue.set动态新增对象属性方法
Feb 23 Javascript
详解AngularJS 过滤器的使用
Jun 02 Javascript
浅谈从React渲染流程分析Diff算法
Sep 08 Javascript
简单了解小程序+node梳理登陆流程
Jun 24 Javascript
javascript用defineProperty实现简单的双向绑定方法
Apr 03 Javascript
解决VueCil代理本地proxytable无效报错404的问题
Nov 07 Javascript
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
PHP编程中字符串处理的5个技巧小结
2007/11/13 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
浅谈PHP的反射机制
2016/12/15 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
鼠标图片振动代码
2006/07/06 Javascript
js location.replace与location.reload的区别
2010/09/08 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
JavaScript实现左侧菜单效果
2017/12/14 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
Python中List.count()方法的使用教程
2015/05/20 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
python对视频画框标记后保存的方法
2018/12/07 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
python实现代码统计程序
2019/09/19 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
预备党员的自我评价
2014/03/12 职场文书
继承权公证书
2014/04/09 职场文书
群教班子对照检查材料
2014/08/26 职场文书
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫