在移动web项目的开发中,遇到一个通过点击页面自动到相应的楼层处的需求,最初的想法就是使用html的target属性进行切换,但实际效果十分死板,显得毫无交互性。该前端架构采用zepto这个轻库进行开发,它具有类似jQuery的语法,之后采用了animate({scrollTop:"100px"})这个函数进行页面的动画滚动,结果就是毫无效果。

  通过查询zepto fx包的源码

transform = prefix + 'transform'cssReset[transitionProperty = prefix + 'transition-property'] =cssReset[transitionDuration = prefix + 'transition-duration'] =cssReset[transitionDelay    = prefix + 'transition-delay'] =cssReset[transitionTiming   = prefix + 'transition-timing-function'] =cssReset[animationName      = prefix + 'animation-name'] =cssReset[animationDuration  = prefix + 'animation-duration'] =cssReset[animationDelay     = prefix + 'animation-delay'] =cssReset[animationTiming    = prefix + 'animation-timing-function'] = ''

  发现zepto的animate()源码采用css3的方式进行,而scrollTop属性不在css3的动画属性中,所以没有生效。接下来的方法就是自己写一个滚动条上下滚动的方法。初步的代码如下:

$.fn.scrollTo =function(options){var defaults = {toT : 0,    //滚动目标位置durTime : 500,  //过渡动画时间delay : 30,     //定时器时间callback:null   //回调函数};var opts = $.extend(defaults,options),timer = null,_this = this,curTop = _this.scrollTop(),//滚动条当前的位置subTop = opts.toT - curTop,    //滚动条目标位置和当前位置的差值index = 0,dur = Math.round(opts.durTime / opts.delay),smoothScroll = function(t){index++;var per = Math.round(subTop/dur);if(index >= dur){_this.scrollTop(t);window.clearInterval(timer);if(opts.callback && typeof opts.callback == 'function'){opts.callback();}return;}else{_this.scrollTop(curTop + index*per);}};timer = window.setInterval(function(){smoothScroll(opts.toT);}, opts.delay);return _this;};

采用原型函数的方式,制做一个scrollTo方,效果还不错~~哈哈

调用方式为 :$("body").scrollTo( {toT : 0} );  这就是最简单的回到顶部

具体demo如下

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>测试</title><style>body{background: red;height: 3000px;text-align: center;}#clickToBack{position: fixed;left: 0;bottom: 0;width: 100%;height: 40px;line-height: 40px;background: white;}</style></head><body><h1>我是头顶</h1><div id="clickToBack">go back</div><script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js" ></script><script>$.fn.scrollTo =function(options){var defaults = {toT : 0,    //滚动目标位置
            durTime : 500,  //过渡动画时间
            delay : 30,     //定时器时间
            callback:null   //回调函数
        };var opts = $.extend(defaults,options),timer = null,_this = this,curTop = _this.scrollTop(),//滚动条当前的位置
            subTop = opts.toT - curTop,    //滚动条目标位置和当前位置的差值
            index = 0,dur = Math.round(opts.durTime / opts.delay),smoothScroll = function(t){index++;var per = Math.round(subTop/dur);if(index >= dur){_this.scrollTop(t);window.clearInterval(timer);if(opts.callback && typeof opts.callback == 'function'){opts.callback();}return;}else{_this.scrollTop(curTop + index*per);}};timer = window.setInterval(function(){smoothScroll(opts.toT);}, opts.delay);return _this;};</script><script>//调用
            $("#clickToBack").click(function() {$("body").scrollTo({toT: 0});})</script></body>
</html>

(PS:本菜鸟注册博客园已经有一段时间了,这还是第一次发博客记录自己的学习,希望大家请多指教~~)

转载于:https://www.cnblogs.com/skyHF/p/4720308.html

zepto不支持animate({scrollTop:100px})的解决办法相关推荐

  1. Nginx服务器不支持PATH_INFO的问题及解决办法

    Nginx服务器不支持PATH_INFO的问题及解决办法 参考文章: (1)Nginx服务器不支持PATH_INFO的问题及解决办法 (2)https://www.cnblogs.com/echoso ...

  2. HD声卡开启麦克风调控补丁 | HD系列声卡不支持立体声混音的解决办法

    1.Realtek HD Audio声卡开趔克风调控补丁 1)解决Realtek ALC 861/883/885声卡音量控制的录音部分无法调节音量问题 2)解决Realtek ALC 861/883/ ...

  3. 桌面支持--电脑出现临时账户--解决办法

    电脑出现临时账户--解决办法 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 登录用户配置文件变 ...

  4. ie8 不支持 position:fixed 的简单解决办法

    今天发现使用 position:fixed 的页面在firefox下没有问题,在IE8下却不能正常显示,在网上找了找,有不少相关文章,但是不是不起作用就是太复杂,后来终于发现一个简单的解决办法,就是在 ...

  5. 蚁剑ASP连SQLSERVER执行xp_cmdshell爆 驱动程序不支持所需的属性 解决办法

    使用ASP连接SQLSERVER sa执行xp_cmdshell爆"-2147217887:ODBC 驱动程序不支持所需的属性错误". 原因是在source\core\asp\te ...

  6. Chrome浏览器不支持字体小于12px的解决办法

    谷歌浏览器默认最小字体为12px,小于12px的字体它都以12px显示,具体效果见下图.有些特殊情况下我们需要字体小点,特别是在制作英文网站的时候,怎么办?既然有问题,我们就有解决问题的方法. < ...

  7. AjaxPro2 方法未定义,对象不支持此方法或属性,解决办法

    如果报错类未定义,或者是命名空间未定义, 首先看看AjaxPro页面注册,要在page_load里面注册 namespace AdoNetDemo { public partial class Add ...

  8. Unity3d使用高通Vuforia发布IOS工程不支持64位的一些解决办法

    1.将Unit升级至4.6.x或5.0.x,将Vuforia差距升级到最新版本(vuforia-unity-mobile-android-ios-4-0-105 ) 2.平台Other Setting ...

  9. nginx不支持pathinfo的原因以及解决办法

    nginx.cn nginx下支持PATH_INFO详解 – 运维与架构 mood 要想让nginx支持PATH_INFO,首先需要知道什么是pathinfo,为什么要用pathinfo? pathi ...

最新文章

  1. 关于P2P流量的识别方式
  2. Math.ceil(),Math.floor()与Math.round()三个函数的定义。
  3. Java如何配置ibmmq集群_如何在IBM MQ集群中动态创建订阅?
  4. python Appium安装及环境配置 mitmproxy安装配置
  5. python函数图像加标签_tkinter(py3)更改图像标签,函数内部,实时
  6. 51nod 1344 走格子【贪心/前缀和】
  7. jenkins+Docker持续化部署(笔记)
  8. 如何维持手机电池寿命_延长手机电池寿命终极技巧教学,iPhone和安卓手机皆适合...
  9. Java笔记-通过4个小程序对Java内存初步探究
  10. 关于html的一切(updating...)
  11. 苹果证实将弃用Windows版QuickTime
  12. 牛客多校第五场 A digits 2 签到
  13. 2021 ZUST,XCPC选拔赛
  14. Linux的安装及忘记Linux密码的措施
  15. UVALive - 5857 Captain Q's Treasure
  16. C# 制作一个倒计时器
  17. mac安装win10_老笔记本加装1T固态硬盘,顺便安装win10 Mac双系统,真香
  18. 多x多y的origin图_3本纯爱文推荐:医疗师 x 小狼狗,漫漫何其多经典
  19. 百分比换算十六进制透明度
  20. 大数据分析未来财富管理谁会脱颖而出?

热门文章

  1. Idea中一个服务按多个端口同时启动
  2. C语言再学习 -- 文件
  3. 汇编语言布尔表达式(NOT、AND、OR)
  4. 去中心化多链钱包CoinU 30问(你想要的答案都在这里)
  5. Android工程模块化平台的设计
  6. 用 Parity 发送 ERC20 Token
  7. Integer overflow, simple but not easy
  8. Ouroboros:一个可证明安全的PoS区块链协议 (共识介绍)
  9. 反卷积在神经网络可视化上的成功应用
  10. Android 5.0 + IDA 6.8 调试经验分享