jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】


Posted in Javascript onSeptember 20, 2016

本文实例讲述了jQuery实现导航滚动到指定内容效果。分享给大家供大家参考,具体如下:

做页面制作也有两年了,其中也做过许多页面效果,有简单的,也有复杂的,今天就来分享一个导航滚动到内容的特效。

平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,今天我就介绍一款 jquery 做的滚动的特效,既可以设置滚动速度,又可以在 url 链接上没有“小尾巴”。

html:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <title></title>
  <style type="text/css">
  #a{height:800px;background:red;}
  #b{height:800px;background:green;}
  #c{height:800px;background:black;}
  #d{height:800px;background:yellow;}
  </style>
</head>
<body>
  <div class="link">
    <a href="javascript:;" onclick="scroll('a')">1111111111</a>
    <a href="javascript:;" onclick="scroll('b')">2222222222</a>
    <a href="javascript:;" onclick="scroll('c')">3333333333</a>
    <a href="javascript:;" onclick="scroll('d')">4444444444</a>
  </div>
  <div id="a"></div>
  <div id="b"></div>
  <div id="c"></div>
  <div id="d"></div>
</body>
</html>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery.scrollto.js"></script>
<script type="text/javascript">
function scroll(id){
  $("#"+id).ScrollTo(1000);
}
</script>

jquery.scrollto.js:

jQuery.getPos = function (e)
{
  var l = 0;
  var t = 0;
  var w = jQuery.intval(jQuery.css(e,'width'));
  var h = jQuery.intval(jQuery.css(e,'height'));
  var wb = e.offsetWidth;
  var hb = e.offsetHeight;
  while (e.offsetParent){
    l += e.offsetLeft + (e.currentStyle?jQuery.intval(e.currentStyle.borderLeftWidth):0);
    t += e.offsetTop + (e.currentStyle?jQuery.intval(e.currentStyle.borderTopWidth):0);
    e = e.offsetParent;
  }
  l += e.offsetLeft + (e.currentStyle?jQuery.intval(e.currentStyle.borderLeftWidth):0);
  t += e.offsetTop + (e.currentStyle?jQuery.intval(e.currentStyle.borderTopWidth):0);
  return {x:l, y:t, w:w, h:h, wb:wb, hb:hb};
};
jQuery.getClient = function(e)
{
  if (e) {
    w = e.clientWidth;
    h = e.clientHeight;
  } else {
    w = (window.innerWidth) ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth) ? document.documentElement.clientWidth : document.body.offsetWidth;
    h = (window.innerHeight) ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.body.offsetHeight;
  }
  return {w:w,h:h};
};
jQuery.getScroll = function (e) 
{
  if (e) {
    t = e.scrollTop;
    l = e.scrollLeft;
    w = e.scrollWidth;
    h = e.scrollHeight;
  } else {
    if (document.documentElement && document.documentElement.scrollTop) {
      t = document.documentElement.scrollTop;
      l = document.documentElement.scrollLeft;
      w = document.documentElement.scrollWidth;
      h = document.documentElement.scrollHeight;
    } else if (document.body) {
      t = document.body.scrollTop;
      l = document.body.scrollLeft;
      w = document.body.scrollWidth;
      h = document.body.scrollHeight;
    }
  }
  return { t: t, l: l, w: w, h: h };
};
jQuery.intval = function (v)
{
  v = parseInt(v);
  return isNaN(v) ? 0 : v;
};
jQuery.fn.ScrollTo = function(s) {
  o = jQuery.speed(s);
  return this.each(function(){
    new jQuery.fx.ScrollTo(this, o);
  });
};
jQuery.fx.ScrollTo = function (e, o)
{
  var z = this;
  z.o = o;
  z.e = e;
  z.p = jQuery.getPos(e);
  z.s = jQuery.getScroll();
  z.clear = function(){clearInterval(z.timer);z.timer=null};
  z.t=(new Date).getTime();
  z.step = function(){
    var t = (new Date).getTime();
    var p = (t - z.t) / z.o.duration;
    if (t >= z.o.duration+z.t) {
      z.clear();
      setTimeout(function(){z.scroll(z.p.y, z.p.x)},13);
    } else {
      st = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.y-z.s.t) + z.s.t;
      sl = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.x-z.s.l) + z.s.l;
      z.scroll(st, sl);
    }
  };
  z.scroll = function (t, l){window.scrollTo(l, t)};
  z.timer=setInterval(function(){z.step();},13);
};

调用方法:

$(id).ScrollTo(speed);
//id是跳转到内容的id;speed是滚动速度,值越大,滚动越慢

完整实例代码点击此处本站下载。

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
加载 Javascript 最佳实践
Oct 30 Javascript
JS+CSS实现简易实用的滑动门菜单效果
Sep 18 Javascript
JavaScript中SetInterval与setTimeout的用法详解
Nov 10 Javascript
纯js代码制作的网页时钟特效【附实例】
Mar 30 Javascript
微信小程序 网络API 上传、下载详解
Nov 09 Javascript
探讨AngularJs中ui.route的简单应用
Nov 16 Javascript
JSON键值对序列化和反序列化解析
Jan 24 Javascript
JavaScript之json_动力节点Java学院整理
Jun 29 Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
在vue项目中使用Nprogress.js进度条的方法
Jan 31 Javascript
JavaScript中构造函数与原型链之间的关系详解
Feb 25 Javascript
Jquery异步上传文件代码实例
Nov 13 jQuery
jquery实现的回旋滚动效果完整实例【附demo源码下载】
Sep 20 #Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
Sep 20 #Javascript
关于Javascript中defer和async的区别总结
Sep 20 #Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
Sep 20 #Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
Sep 20 #Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 #Javascript
javascript cookie基础应用之记录用户名的方法
Sep 20 #Javascript
You might like
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
node.js中fs文件系统目录操作与文件信息操作
2018/02/24 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
python求素数示例分享
2014/02/16 Python
Python列表计数及插入实例
2014/12/17 Python
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
python全栈知识点总结
2019/07/01 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
《大海那边》教学反思
2014/04/09 职场文书
说明书格式及范文
2014/05/07 职场文书
工程售后服务方案
2014/06/08 职场文书
致接力运动员加油稿
2015/07/21 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL