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 相关文章推荐
Jquery 学习笔记(一)
Oct 13 Javascript
jQuery调用WebService的实现代码
Jun 19 Javascript
js使用removeChild方法动态删除div元素
Aug 01 Javascript
jQuery中innerWidth()方法用法实例
Jan 19 Javascript
js ajaxfileupload.js上传报错的解决方法
May 05 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
老生常谈Javascript中的原型和this指针
Oct 09 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
Nov 04 Javascript
AngularJS入门示例之Hello World详解
Jan 04 Javascript
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
vue缓存的keepalive页面刷新数据的方法
Apr 23 Javascript
微信小程序APP的生命周期及页面的生命周期
Apr 19 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中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
Yii分页用法实例详解
2014/12/04 PHP
php递归创建目录的方法
2015/02/02 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
php源码的使用方法讲解
2019/09/26 PHP
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
vue v-for直接循环数字实例
2019/11/07 Javascript
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
python3大文件解压和基本操作
2017/12/15 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
python交互界面的退出方法
2019/02/16 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
电台编导求职信
2014/05/06 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技