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 相关文章推荐
初学prototype,发个JS接受URL参数的代码
Sep 25 Javascript
javascript椭圆旋转相册实现代码
Jan 16 Javascript
jquery查找tr td 示例模拟
May 08 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
Aug 29 Javascript
JS原型链 详解及示例代码
Sep 06 Javascript
发布订阅模式在vue中的实际运用实例详解
Jun 09 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 Javascript
vue 实现强制类型转换 数字类型转为字符串
Nov 07 Javascript
封装一下vue中的axios示例代码详解
Feb 16 Javascript
Node.js API详解之 assert模块用法实例分析
May 26 Javascript
基于Electron实现桌面应用开发代码实例
Jul 07 Javascript
js+audio实现音乐播放器
Sep 13 Javascript
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
我的论坛源代码(六)
2006/10/09 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
popdiv
2006/07/14 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
简单实现js浮动框
2016/12/13 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
python获取从命令行输入数字的方法
2015/04/29 Python
python安装教程
2018/02/28 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
python实现简易内存监控
2018/06/21 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
Numpy数组的广播机制的实现
2020/11/03 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
环境科学专业个人求职信
2013/09/26 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
学习十八大标语
2014/10/09 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
个人总结怎么写
2015/02/26 职场文书
企业党建工作总结2015
2015/05/26 职场文书
公司员工离职感言
2015/08/03 职场文书
2016年记者节感言
2015/12/08 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
windows11怎么查看wifi密码? win11查看wifi密码的技巧
2021/11/21 数码科技