jQuery的animate在火狐浏览器上不支持backgroundPosition的解决方法

jQuery的animate是一个非常好用的东东,但某些动画效果支持得不够好,比如backgroundPosition这种神器火狐上竟然用不了,于是我就自己写了一个。

 1 /**
 2  * 自定义backgroundPosition的animate,支持火狐,jQuery1.8以上版本
 3  * @author Meleong
 4  * v1.00
 5  */
 6 (function($) {
 7     $.fx.step["backgroundPosition"] = function(fx) {
 8         if (typeof fx.end == ‘string‘) {
 9             fx.start = getBgPos(fx.elem);
10             //fx.end原本是一个string,这里将它转换成数组,就不会再进入这个if,也方便我们下面的计算
11             //例 "0px -21px"
12             fx.end = [parseFloat(fx.end.split(" ")[0]), parseFloat(fx.end.split(" ")[1])];
13         }
14         //这里fx.pos是根据传入的时间参数,从0到1变化的浮点数
15         var nowPosX = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit;
16         var nowPosY = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit;
17         fx.elem.style.backgroundPosition = nowPosX + ‘ ‘ + nowPosY;
18
19         /**
20          * 获取backgroundPosition数组[top, left],没有单位
21          */
22         function getBgPos(elem) {
23             var top  = 0.0;
24             var left = 0.0;
25             if ($(elem).css("backgroundPosition")) {
26                 //例 "0px -21px"
27                 top  = parseFloat($(elem).css("backgroundPosition").split(" ")[0]);
28                 left = parseFloat($(elem).css("backgroundPosition").split(" ")[1]);
29             }else{
30                 top  = parseFloat($(elem).css("backgroundPositionX"));
31                 left = parseFloat($(elem).css("backgroundPositionY"));
32             }
33             return [top, left];
34         }
35     }
36 })(jQuery);

注释写得很详细,相信大家都能看懂。下面是使用方法:

跟jQuery其他的animate的使用方法一致。例如:

1 $("#id").stop().animate({backgroundPosition : "0px -21px"}, 1000, function(){
2     alert("动画执行完毕");
3 })

这里只写了backgroundPosition,并没有将X和Y单独写出来,有兴趣的同学可以自己写一下,应该是比较简单的。

下面这个范例是一个backgroundPosition的动画,用div也可以做游戏(只是个走路范例,键盘↑↓←→键控制,开头的卡顿是按键机制的问题,不用理他)

点击下载

时间: 2024-10-13 23:08:30

jQuery的animate在火狐浏览器上不支持backgroundPosition的解决方法的相关文章

2.火狐浏览器上,uploadify文件上传不兼容,和session重新发起的问题

前段时间做表单中有文件上传的功能,主要是因为用uploadify上传,发生了问题: 问题描述1:用uploadify实现文件上传时,遇到在火狐上不兼容问题,uploadify样式无法加载的问题,这个简单,直接在火狐浏览器上安装flash插件就可以了解决, 问题描述2:使用uploadify上传文件时,发现上传文件的session(以下就叫file_session)和提交表单的session(sub_session)不一样.在提交表单的Action中我们想要获取之前的请求在session设置的值时

jQuery中animate()方法以及$('body').animate({"scrollTop":top})不被Firefox支持问题的解决

$("body").animate({"scrollTop":top}): 只被chrome支持,而不被Firefox支持 $("html").animate({"scrollTop":top}): 只被Firefox支持,而不被chrome支持. 如果想让这段js被chrome和Firefox都支持的话,应该这样: $("html,body").animate({"scrollTop"

jQuery插件AjaxFileUpload实现ajax文件上传时老是执行error方法 问题原因

今天在用jQuery插件AjaxFileUpload实现ajax文件上传时,遇到一个问题,如图: 老是执行error,无法执行succes方法,追踪ajaxfileupload.js源码发现: 当执行if(type=="json")    eval("data = "+data);会抛出异常,导致在处理异常的时候将status = "error" 因此一直执行error方法. 上网查询,得知eval函数是用来执行一段js代码,而并不是如我所想的反

jQuery中animate()的方法以及$("body").animate({"scrollTop":top})不被Firefox支持问题的解决

jQuery中animate()的方法可以去w3school查看,这里主要说一下: $("body").animate({"scrollTop":top}) 不被Firefox支持问题的解决. 其实是使用body的: $("body").animate({"scrollTop":top}) 只被chrome支持,而不被Firefox支持. 而使用html的: $("html").animate({"

用Jquery动态append方式加入标签时Css样式丢失的解决方法

一般在Jquery中会用下面的方式来添加新标签: var obj = "<fieldset data-role='controlgroup' data-type='vertical' data-role='fieldcontain'> <input id='menu0" type='checkbox'/><label for='menu0'> 复选框 </label> </fieldset>";  //按个人要求拼接

iphone 浏览器自动解析数字为号码解决方法

iphone 浏览器自动解析数字为号码解决方法 www.MyException.Cn  网友分享于:2015-10-09  浏览:0次 iphone 浏览器自动解析数字为号码解决办法 在工作中遇到了这么一个问题 —— 在HTML代码中有一部分数字,设定的样式为“白色”,在android 浏览器 和 PC web中显示都是正常的,但是在iphone浏览器中先显示为白色,之后有变为“黑色”,在点击这串数字的时候,显示为拨打电话界面. 分析: 根据上图展现的方式说明“1234-5678-9999”添加

chrome浏览器默认启动时打开2345导航的解决方法

2345并没有修改chrome内部设置,它只是把所有的快捷方式修改了,包括开始菜单旁边的快捷启动图标. 只需要右键chrome快捷方式,在目标一栏中,把"----chrome.exe"引号后面的所有东西删除,然后确定,就不会再有问题了.开始菜单旁边的小chrome图标一样方法都可以解决... 而若在更改目标位置时出现需要一"您的权限不足,请点击继续来获得权限." 解决方法: 对计算机图标,击右键,选择管理. 开界面后,选择本地用户和组,单击用户,选择administ

js添加的表单在火狐下获取不到数据的解决方法

相信很多朋友在进行网页制作的时候都会遇到过这样的问题:就是用js在表单内添加数据控件之后:在火狐下获取不到数据的问题. 前几天,我在开发一个使用js添加数据填写项的时候,也出现了这样的问题:一开始我还以为是火狐下ajax加载数据出了问题(因为在ie下可以正常的获取到数据):经过测试原来并是这样的问题,而是form放得位置不同, 在form和table结合使用的时候,很多朋友都喜欢这样放: <table>                <form>                  

JavaScript中的window.close在FireFox和Chrome上不能正常动作的解决方法

原文:JavaScript中的window.close在FireFox和Chrome上不能正常动作的解决方法 JS中关闭窗口的方法window.close()在IE上能够正常动作,而在FireFox和Chrome上无法动作. (当时,在Chrome35.0上的时候还是可以的,Chrome36.0上就无法动作了JS中关闭窗口的方法window.close()在IE上能够正常动作,而在FireFox和Chrome上无法动作. (当时,在Chrome35.0上的时候还是可以的,Chrome36.0上就