smartJQueryZoom(smartZoom) 存在的兼容性BUG,以及解决方法
smartJQueryZoom 是一个很好用的库。
它基于jQuery,可以对某个元素(比如 img)进行渲染,渲染之后可以放大这个区域,在做图片浏览时很好用。
但它有一个兼容性BUG:
当浏览器不是chrome(比如safari)时,放大倍率会出现问题:滚轮滚一下,就直接到了最大倍率。
为了修复这个BUG,我看了一下这个库的源码。
// listening mouse and touch events
if(settings.touchEnabled == true)
targetElement.bind('touchstart.smartZoom', touchStartHandler);
if(settings.mouseEnabled == true){
if(settings.mouseMoveEnabled == true)
targetElement.bind('mousedown.smartZoom', mouseDownHandler);
if(settings.scrollEnabled == true){
containerDiv.bind('mousewheel.smartZoom', mouseWheelHandler);
containerDiv.bind( 'mousewheel.smartZoom DOMMouseScroll.smartZoom', containerMouseWheelHander);
}
if(settings.dblClickEnabled == true && settings.zoomOnSimpleClick == false)
containerDiv.bind('dblclick.smartZoom', mouseDblClickHandler);
}
document.ondragstart = function () { return false; }; // allow to remove browser default drag behaviour
if(settings.adjustOnResize == true)
$(window).bind('resize.smartZoom', windowResizeEventHandler); // call "adjustToContainer" on resize if(settings.initCallback != null) // call callback function after plugin initialization
settings.initCallback.apply(this, targetElement);
},
红色字的方法:
/**
* call zoom function on mouse wheel event
* @param {Object} e : mouse event
* @param {Object} delta : wheel direction 1 or -1
*/
function mouseWheelHandler(e, delta){
var smartData = targetElement.data('smartZoomData'); if(smartData.currentWheelDelta*delta < 0) // if current and delta have != sign we set 0 to go to other direction
smartData.currentWheelDelta = 0;
smartData.currentWheelDelta += delta; // increment delta zoom faster when the user use wheel again
publicMethods.zoom(smartData.mouseWheelDeltaFactor*smartData.currentWheelDelta, {"x":e.pageX, "y":e.pageY}); // 0.15
}
注意这个注释:
@param {Object} delta : wheel direction 1 or -1
作者默认 delta 是 1 或者 -1 ,但是其实并不是如此。
比如在safari上,这个值是 或者 -40 .
一旦这个值错了,后面的放大计算就会出错。
所以修复的方法也很简单:保证delta永远是 1 或者 -1 就行了。
function mouseWheelHandler(e, delta){
var smartData = targetElement.data('smartZoomData');
// if delta !== 1
if (delta > 1) {
delta = 1
} else if (delta < -1) {
delta = -1
}
// end
if(smartData.currentWheelDelta*delta < 0) // if current and delta have != sign we set 0 to go to other direction
smartData.currentWheelDelta = 0;
smartData.currentWheelDelta += delta; // increment delta zoom faster when the user use wheel again
publicMethods.zoom(smartData.mouseWheelDeltaFactor*smartData.currentWheelDelta, {"x":e.pageX, "y":e.pageY}); // 0.15
}
以上。
smartJQueryZoom(smartZoom) 存在的兼容性BUG,以及解决方法的更多相关文章
- 浅谈Android Fragment嵌套使用存在的一些BUG以及解决方法
时间 2014-03-18 18:00:55 eoe博客 原文 http://my.eoe.cn/916054/archive/24053.html 主题 安卓开发 自从Android3.0引入了F ...
- ios/iphone手机请求微信用户头像错位BUG及解决方法
转:http://www.jslover.com/code/527.html ios/iphone手机请求微信用户头像错位BUG及解决方法 发布时间:2014-12-01 16:37:01 评论数:0 ...
- ie下没有背景色bug的解决方法
鼠标经过下面的二级菜单的时候,在ie下面,收缩上去了,给这个二级菜单加了背景后,就是正常的,这个是ie下面的一个bug,解决方法:background-img:url(123.jpg):url里面的图 ...
- 微擎系统BUG漏洞解决方法汇总(原创)
微擎微赞系统BUG漏洞解决方法汇总 弄了微擎系统来玩玩,发觉这个系统BUG还不少,阿里云的提醒都一大堆,主要是没有针对SQL注入做预防,处理的办法基本都是用转义函数. 汇总: 1. 漏洞名称: 微擎任 ...
- 微擎系统BUG漏洞解决方法汇总
微擎微赞系统BUG漏洞解决方法汇总 弄了微擎系统来玩玩,发觉这个系统BUG还不少,阿里云的提醒都一大堆,主要是没有针对SQL注入做预防,处理的办法基本都是用转义函数. 汇总: 1. 漏洞名称: 微擎任 ...
- ie6,ie7,ie8 css bug兼容解决方法
IE浏览器以不支持大量的css 属性出名,同时也因其支持的css属性中存在大量bug. 这里收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决,也希 ...
- Arduino下LCD1602综合探究(下)——如何减少1602的连线,LiquidCrystal库,LiquidCrystal库中bug的解决方法
一.前言: 上文中,笔者系统的阐述了1602的两种驱动方式,并简单的提到了Arduino的LiquidCrystal库.本文紧接上文,对以下两个问题进行更加深入的探讨:如何能够使1602对Arduin ...
- 10个常见的IE bug和解决方法
1.IE6 幽灵文本(Ghost Text bug) 在我写本文之前,我遇到了这个bug.它相当的古怪和滑稽.一块不知哪来的重复的文本,被IE6显示在靠近原文本的下面.(译注:也可以参看 Explor ...
- IE6/7/8 CSS兼容性问题和解决方法汇总
断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1: ...
随机推荐
- Python数据结构01 线性结构
栈 实现 后进先出的结构,主要有如下操作 *Stack() *push(item) *pop() *peek() *isEmpty() *size() class Stack(): def __ini ...
- liunx中组合查询的命令
今天无聊,把以前的liunx命令拿过练练,尤其是一些组合命令并带有逻辑的.这里的script是一个文件夹. 1.查看一个文件的最后3行的第一行. [root@localhost home]# tail ...
- 呼~~~~--历时几个星期终于搞好了HTTPS协议---阿里云
打开网站加入阿里云官网 https://yundun.console.aliyun.com/?p=cas#/overview/cn-hangzhou 登陆查看自己的证书 没有点击购买证书 -- 选中对 ...
- The main method caused an error: java.util.concurrent.ExecutionException: org.apache.flink.runtime.client.JobSubmissionException: Failed to submit JobGraph.
在使用flink run命令提交任务可能会遇到如下错误: The program finished with the following exception: org.apache.flink.cli ...
- 《UNIX环境高级编程》(APUE) 笔记第五章 - 标准I/O库
5 - 标准I/O库 Github 地址 1. 标准 I/O 库作用 缓冲区分配 以优化的块长度执行 I/O 等 使用户不必担心如何选择使用正确的块长度 标准 I/O 最终都要调用第三章中的 I/O ...
- mysql根据一张表更新另一张表数据
UPDATE channelcountry, appywproducts SET channelcountry.ChannelName = appywproducts.YWNameCN WHERE c ...
- Linux 文件类型 ,文件权限
第一个字符段:文件类型.第二个组字符段又分为三段(每三个字符为一段不足用‘-’):文件属性. . drwxrwxrwx . -rwxr-xr-x 第一字符段: 第二字符组段依次为: - :普通文件 ...
- Nginx 介绍和安装(centos7)
本文是作者原创,版权归作者所有.若要转载,请注明出处 什么是 nginx ? Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高 ...
- XDocument常用属性
XDocument常用属性: 1) BaseUri 获取此 XObject 的基 URI. (继承自 XObject.) 2) Declaration 获取或设置此文档的 XML 声明. 3) Doc ...
- [译]高性能缓存库Caffeine介绍及实践
概览 本文我们将介绍Caffeine-一个Java高性能缓存库.缓存和Map之间的一个根本区别是缓存会将储存的元素逐出.逐出策略决定了在什么时间应该删除哪些对象,逐出策略直接影响缓存的命中率,这是缓存 ...