利用jQuery的animate() 方法,我们很容易实现滚动条的平滑滚动效果:

$(function() {
$('#top').click(
function (e) {
$('html, body').animate({scrollTop: '0px'}, 1000);
return false;
}
);
});

  

在线示例:利用jQuery实现的返回顶部

最近在做基于zeptoJS手机网页开发,遇到类似需求,实践之后发现zeptoJS并不像Jquery一样支持scrollTop()方法,

所以,即使引入使zeptoJS支持The animate()方法的 fx.js 之后,依然无法实现平滑滚动效果。

GOOGLE了一下发现,原来并不是我一人遇到这种问题,Stack Overflow早已有大量相关讨论:

以上讨论给出了很多解决方案,目前我采用了下面这种:

 ZeptoScroll  插件

 GitHub地址:https://github.com/suprMax/ZeptoScroll

 官网地址:http://max.degterev.me/blog/zepto-scrolling

 zepto.scroll.js

/* Author:
Max Degterev @suprMax
*/ ;(function($) {
var DEFAULTS = {
endY: $.os.android ? 1 : 0,
duration: 200,
updateRate: 15
}; var interpolate = function (source, target, shift) {
return (source + (target - source) * shift);
}; var easing = function (pos) {
return (-Math.cos(pos * Math.PI) / 2) + .5;
}; var scroll = function(settings) {
var options = $.extend({}, DEFAULTS, settings); if (options.duration === 0) {
window.scrollTo(0, options.endY);
if (typeof options.callback === 'function') options.callback();
return;
} var startY = window.pageYOffset,
startT = Date.now(),
finishT = startT + options.duration; var animate = function() {
var now = Date.now(),
shift = (now > finishT) ? 1 : (now - startT) / options.duration; window.scrollTo(0, interpolate(startY, options.endY, easing(shift))); if (now < finishT) {
setTimeout(animate, options.updateRate);
}
else {
if (typeof options.callback === 'function') options.callback();
}
}; animate();
}; var scrollNode = function(settings) {
var options = $.extend({}, DEFAULTS, settings); if (options.duration === 0) {
this.scrollTop = options.endY;
if (typeof options.callback === 'function') options.callback();
return;
} var startY = this.scrollTop,
startT = Date.now(),
finishT = startT + options.duration,
_this = this; var animate = function() {
var now = Date.now(),
shift = (now > finishT) ? 1 : (now - startT) / options.duration; _this.scrollTop = interpolate(startY, options.endY, easing(shift)); if (now < finishT) {
setTimeout(animate, options.updateRate);
}
else {
if (typeof options.callback === 'function') options.callback();
}
}; animate();
}; $.scrollTo = scroll; $.fn.scrollTo = function() {
if (this.length) {
var args = arguments;
this.forEach(function(elem, index) {
scrollNode.apply(elem, args);
});
}
};
}(Zepto));

  

DEMO:

<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <title>ZeptoScroll</title>
<style type="text/css"> #main{
font: normal 13px/1.4em Helvetica, Arial, sans-serif;
width: 96%;
padding: 2%;
max-width: 320px;
margin: 0 auto;
background-color: #f5f5f5;
color:#666;
} #top {
display: inline-block;
padding: 6px 0;
color: #fff;
width: 100%;
cursor: pointer;
text-align: center;
border-radius: 3px;
background-color: #00bb9c;
text-decoration: none;
}
</style>
</head>
<body>
<div id="main">
<h1>Add some gold.</h1>
<p>Look what I'm dealing with, man. I'm dealing with fools and trolls. I'm dealing with soft targets, and it's just strafing runs in my underwear before my first cup of coffee … they lay down with their ugly wives and their ugly children and just look at their loser lives and then they look at me and say, 'I can't process it.' Well, no, and you never will! Stop trying! Just sit back and enjoy the show.</p> <p>I am on a drug. It's called Charlie Sheen. It's not available. If you try it once, you will die. Your face will melt off and your children will weep over your exploded body.</p> <p>It's being directed and written by a genius named David Ward who, I don't know, won the Academy Award at 23 for writing The Sting?
It was his pen and his vision that created the classic that we know today as Major League. In fact,
a lot of people think the movie's called Wild Thing, as they should. Whatever … If they want me in it, it's a smash. If they don't, it's a turd that opens on a tugboat.</p> <p>I tried marriage. I'm 0 for 3 with the marriage thing. So, being a ballplayer — I believe in numbers. I'm not going 0 for 4. I'm not wearing a golden sombrero.</p>
<p>Look what I'm dealing with, man. I'm dealing with fools and trolls.
I'm dealing with soft targets, and it's just strafing runs in my underwear before my first cup of coffee …
they lay down with their ugly wives and their ugly children and just look at their loser lives and then they look at me and say, 'I can't process it.' Well, no, and you never will! Stop trying! Just sit back and enjoy the show.</p> <p>I am on a drug. It's called Charlie Sheen. It's not available. If you try it once, you will die. Your face will melt off and your children will weep over your exploded body.</p> <a id="top" href="javascript:void(0);">To the top, please!</a>
</div> <script src="http://libs.baidu.com/zepto/0.8/zepto.min.js"></script>
<script src="static/zepto.scroll.js"></script>
<script type="text/javascript">
$('#top').on('click', function(e) {
$.scrollTo({
endY: 0,
duration: 200,
callback: function() {
alert('at the top');
}
});
});
</script>
</body>
</html>

  

zeptoJS:如何像jQuery一样,让滚动变得优雅?的更多相关文章

  1. jQuery全能图片滚动插件

    插件开发背景 随着前端开发领域越来越受到重视,前端开发也变得越来越火热.各种优秀的前端组件层出不穷.尤其是jQuery插件,很多前端组件都是基于jQuery开开发的. 图片滚动是前端开发中可以说是非常 ...

  2. 精心挑选10款优秀的 jQuery 图片左右滚动插件

    在现代的网页设计中,图片和内容滑块是一种极为常见和重要的元素.你可以从头开始编写自己的滑动效果,但是这将浪费很多时间,因为网络上已经有众多的优秀的 jQuery 滑块插件.当然,如果要从大量的 jQu ...

  3. 【jQuery】scroll 滚动到顶部

    Jquery 实现页面滚动到顶端 $(document).ready(function () { // 滚动窗口来判断按钮显示或隐藏 $(window).scroll(function () { // ...

  4. jQuery BreakingNews 间歇滚动

    BreakingNews 是一款基于jQuery的间歇滚动插件.它可以设置标题.标题颜色.标题背景颜色.链接颜色.字体大小.边框.宽度.自动滚动.间歇时间等等,同时它还好提供两种过度方式--淡入淡出( ...

  5. Infinite Scroll - jQuery & WP 无限滚动插件

    无限滚动(Infinite Scroll)也称为自动分页.滚动分页和无限分页.常用在图片.文章或其它列表形式的网页中,用来在滚动网页的时候自动加载下一页的内容.Infinite Scroll  这款  ...

  6. jQuery图片无缝滚动JS代码ul/li结构

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. jquery文字左右滚动

    实现jquery文字左右滚动 <div class="fl">中奖名单:</div> <div class="scrollText" ...

  8. jQuery图片无缝滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. jQuery.hhLRSlider 左右滚动图片插件

    /**  * jQuery.hhLRSlider 左右滚动图片插件  * User: huanhuan  * QQ: 651471385  * Email: th.wanghuan@gmail.com ...

随机推荐

  1. Python基础----函数

    1.作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'wupeiqi' print name 下面的结论对吗? 外层变量,可以被内 ...

  2. C++学习笔记39:进程概念

    进程的基本概念 进程是描述程序执行过程和资源共享的基本单位 主要目的:控制和协调程序的执行 进程相关函数 用户与组ID函数 创建进程:system(),fork(),exec() 终止进程:kill( ...

  3. Linux LVM 扩展磁盘分区

    系统:centos 6.3--新建分区 fdisk -l /dev/sdc       # 查看分区 fdisk /dev/sdc          # 创建分区 :n                 ...

  4. 关于webstorm(phpstorm)设置了编码格式之后还是乱码的问题

    今天在使用phpstorm的时候,页面开始是设置utf-8的,一切正常.但是,当我从一个gbk页面复制了一段代码到phpstorm里面的时候,页面预览的时候,居然打不开了,显示是乱码.接着我就把复制的 ...

  5. PHP MySQLi

    PHP MySQLi 简介 PHP MySQLi = PHP MySQL Improved! MySQLi 函数允许您访问 MySQL 数据库服务器. 注释:MySQLi 扩展被设计用于 MySQL ...

  6. php pdo_mysql使用方法

    <?php $dsn='mysql:host=127.0.0.1;port=3306;dbname=bisai'; $username='root'; $password=''; $driver ...

  7. JavaWeb学习笔记之JSP(一)

    1. JSP: 1.1. 为什么需要 JSP ? 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,但是其中的静态网页内容也需要程序员使用Java语言来进行输出,这就造成了大量代码的冗余 ...

  8. QT学习篇: 入门(二)

    库存订单界面: (1)包括序号.订单代码.订单名称.产品代码.产品类型.计划加工数量.最晚完工日期. (2)model增加临时map,用于存储库存订单. (3)后台计算完成后,会将库存订单推送给前台, ...

  9. Secure CRT 如何连接虚拟机里面的CentOS系统 当主机没有网的时候 作者原创 欢迎转载

    当家里没有网络的时候: 1.第一步:首先保证主机所有的网卡都没有分享连接给VM8这一块网卡 如图:这个设置就保证了无线网络连接这块网卡没有分享给VM8这一块网卡 第二步:启用VM8这一块网卡,右键en ...

  10. innerHTML的运用

    <!doctype html> <html> <style> li{float:left;margin:0 100px;color:red;} </style ...