转载请注明出处:http://www.cnblogs.com/shamoyuu/p/4375678.html

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也可以做游戏(只是个走路范例,键盘↑↓←→键控制,开头的卡顿是按键机制的问题,不用理他)

点击下载

【前端】jQuery的animate在火狐浏览器上不支持backgroundPosition的解决方法的更多相关文章

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

    在网上找的ffSupp.js文件 /** * 自定义backgroundPosition的animate,支持火狐,jQuery1.8以上版本 * @author Meleong * v1.00 */ ...

  2. JQuery Mobile 的引用代码,以及在手机浏览器上字体太小的解决办法

    JQuery Mobile 的引用代码: <link rel="stylesheet" href="http://code.jquery.com/mobile/1. ...

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

    iphone 浏览器自动解析数字为号码解决方法 www.MyException.Cn  网友分享于:2015-10-09  浏览:0次   iphone 浏览器自动解析数字为号码解决办法 在工作中遇到 ...

  4. Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法

    Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法 2014-03-27 11:44:46|  分类: Easy UI|举报|字号 订阅     可以使用$.parser.pa ...

  5. 001. 使用ssh连接不上centos 6.5的解决方法及其解决中文乱码

    1. 使用ssh连接不上centos 6.5的解决方法: 错误显示: Connecting to 192.168.1.106:22... Could not connect to '192.168.1 ...

  6. 【转】PLSQL developer 连接不上64位Oracle 的解决方法

    PLSQL developer 连接不上64位Oracle 的解决方法 快乐无极 , 2012/06/13 10:10 , 开发文档 , 评论(6) , 阅读(140430) , Via 本站原创 大 ...

  7. PLSQL developer连接不上64位Oracle的解决方法

    PLSQL developer连接不上64位Oracle的解决方法 64位下装Oracle 11g 64位,PLSQL Developer使用出现问题. 问题描述: 登录对话框中,数据库下拉框为空: ...

  8. Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法

    Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法 在使用struts2的项目中上传文件的时候出现了一个这样的错误: 2011-7 ...

  9. 【转】Windows2008上传大文件的解决方法(iis7解决上传大容量文件)

    2008上传大文件的解决方法:http://wenku.it168.com/d_000091739.shtml 2003上传大文件的解决方法:http://tech.v01.cn/windowsxit ...

随机推荐

  1. 86-Money Flow Index 资金流量指数指标.(2015.7.3)

    Money Flow Index 资金流量指数指标 计算: 1.典型价格(TP)=当日最高价.最低价与收盘价的算术平均值 2.货币流量(MF)=典型价格(TP)×N日内成交金额 3.如果当日MF> ...

  2. stm8l定时器中的ARPE

    • Auto-reload preload enabled (ARPE bit set in the TIM1_CR1 register). In this mode,when data is wri ...

  3. Maximun product

    Given a sequence of integers S = {S1, S2, ..., Sn}, you shoulddetermine what is the value of the max ...

  4. UVa 10129 单词 (欧拉通路)

    题意: 输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如acm.malform.mouse).每个单词最 多包含100 ...

  5. maven运行tomcat6出现错误Exception starting filter encodingFilter怎么解决

    严重: Exception starting filter encodingFilterjava.lang.ClassCastException: org.springframework.web.fi ...

  6. 有三个数a,b,c要求按大小顺序将其输出<if,else语句的学习>

    #include <stdio.h> /* 有三个数a,b,c要求按大小顺序将其输出 ----------soulsjie 20170525------ */ void main(){ i ...

  7. xtu summer individual 5 A - To Add or Not to Add

    To Add or Not to Add Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeFo ...

  8. Eclipse调试相关

    Eclipse调试相关 F5 step into就是单步执行,遇到子函数就进入并且继续单步执行. F6 step over是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个 ...

  9. Leetcode 212.单词搜索II

    单词搜索II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&q ...

  10. POJ1308/HDU1325/NYOJ129-Is It A Tree?,并查集!

    Is It A Tree? Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28838   Accepted: 9843 -& ...