JS_动态定位效果

html提供了一个功能:点击一个a标签,只要在href属性中写上#id就可以定位到那个id的位置,但是为了更好的用户体验,考虑使用缓动公式来达到这个需求。

缓动公式网上搜搜就有好多,五花八门的。自己写了一个相对比较好理解的,比较笨的方法用在很多个小例子上面。下面po下我的代码

html:

 1 <div class="theContent">
 2
 3         <div class="nav">
 4             <ul>
 5                 <li id="nav1" class="title">导航一</li>
 6                 <li id="nav2" class="title">导航二</li>
 7                 <li id="nav3" class="title">导航三</li>
 8                 <li id="nav4" class="title">导航四</li>
 9             </ul>
10         </div>
11         <div class="content" id="txt1">内容一</div>
12         <div class="content" id="txt2">内容二</div>
13         <div class="content" id="txt3">内容三</div>
14         <div class="content" id="txt4">内容四</div>
15
16     </div>

html代码

css代码

 1 ul{
 2     list-style: none;
 3 }
 4 .nav{
 5     width: 100%;
 6     height: 200px;
 7     background:pink;
 8     padding-top:50px;
 9 }
10 .nav ul{
11     width: 410px;
12     height: 40px;
13     margin:0 auto;
14 }
15 .nav ul li{
16     float: left;
17     height: 40px;
18     width: 100px;
19     line-height:40px;
20     text-align: center;
21     border: 1px solid #000;
22     cursor: pointer;
23 }
24 .content{
25     width:100%;
26     height: 400px;
27 }
28 #nav1,#txt1{
29     background: #FFE1FF;
30 }
31 #nav2,#txt2{
32     background: #FFD39B;
33 }
34 #nav3,#txt3{
35     background: #FFBBFF;
36 }
37 #nav4,#txt4{
38     background: #FFAEB9;
39 }
40 .theContent{
41     height: 2300px;
42 }

css代码

js:

 1 window.addEventListener("load",function(){
 2
 3     var nav = getClass("title");
 4     var txt = getClass("content");
 5     var len = nav.length;
 6
 7     for(var i=0;i<len;i++){
 8         (function(m){
 9             nav[i].addEventListener("click",function(){
10                 //document.documentElement.scrollTop = document.body.scrollTop = txt[m].offsetTop;
11                 var des = txt[m].offsetTop;
12                 var start = window.pageYOffset || document.documentElement.offsetTop;
13                 moveSlowly(des,start);
14             })
15         })(i)
16     }
17
18 })
19
20 var timer = null;
21
22 function moveSlowly(des,start,time){
23     clearInterval(timer);
24     var speedTime = time || 100;
25     var start = start || 0;
26     var distance = des - start;
27     var speed = distance/speedTime;
28     var i = 1;
29     var pos = start;
30
31     timer = setInterval(function(){
32
33         if(i == speedTime){
34             pos = des;
35             document.documentElement.scrollTop = document.body.scrollTop = pos;
36             clearInterval(timer);
37         }else{
38             pos = pos + speed;
39             document.documentElement.scrollTop = document.body.scrollTop = pos;
40             console.log(pos)
41             i++;
42         }
43
44     },1)
45 }
46
47
48 function getClass(clsName,Parent){
49     var oParent = Parent ? document.getElementById(Parent): document;
50     var eles = [];
51     var elements = oParent.getElementsByTagName("*");
52     var len = elements.length;
53
54     for(var i =0;i<len;i++){
55         if(clsName == elements[i].className){
56             eles.push(elements[i])
57         }
58     }
59
60     return eles;
61 }

效果展示:

  • 导航一
  • 导航二
  • 导航三
  • 导航四

内容一

内容二

内容三

内容四

以上内容,如有错误请指出,不甚感激。

时间: 2024-08-11 07:33:59

JS_动态定位效果的相关文章

vue实现京东动态楼层效果

页面效果如下 <template> <div> <h1>首页</h1> <section class="floor-nav" id="floorNavList"> <!-- 左侧楼层 --> <ul class="nav-list"> <li class="nav-list-item" v-for="(item, index)

Android 导航条效果实现(六) TabLayout+ViewPager+Fragment

TabLayout 一.继承结构 public class TabLayout extends HorizontalScrollView java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.FrameLayout ? android.widget.HorizontalScrollView ? android.support.design.widget.TabLayout 二.TabLayou

CSS3图片轮播效果

原文:CSS3图片轮播效果 在网页中用到图片轮播效果,单纯的隐藏.显示,那再简单不过了,要有动画效果,如果是自己写的话(不用jquery等),可能要费点时间.css3的出现,让动画变得不再是问题,而且简单易用.下面介绍我用css3与js写的一个图片轮播效果. 一般图片轮播就是三四张图片: <div class="wrap"> <div class="carousel"> <div><img src="http://

Android 从无到有打造一个炫酷的进度条效果

从无到有打造一个炫酷的进度条效果

html+css3实现长方体效果

网上大都是正方体的效果,由于做一个东西需要,写了一个HTML+css3实现的长方体,有需要的也可以看看.                   2017-07-25         21:30:23 html代码 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>html+css3实现长方体效果<

鼠标悬停图片移动的效果

当前很多购物网站,像京东,蘑菇街这些都有对展示的图片做这种鼠标悬停图片上移,下移,左移或者右移效果, 实现代码很简单,就用css3的transform便可实现. 下列代码实现的是鼠标悬停,div向上移动30px,鼠标拿开div恢复原始位置. css: <style> div{ margin-top: 100px; width: 100px; height: 100px; background: pink; transition:All 0.4s ease-in-out;//让移动效果变得平滑自

css动画效果

1.2D,3D转换 -1.通过2D,3D转换,我们能够对元素进行移动,缩放,转动,拉长,或拉伸. 转换是使元素改变形状,尺寸和位置的一种效果. 可以使用2D或者3D转换来转换元素. -2.2D(transform)转换方法 1.translate(x,y)移动,第二个参数未提供时默认为0 2.rotate(xdeg)旋转 3.scale(x,y)缩放 4.skew(xdeg,ydeg)倾斜,第二个参数未提供时默认为0 -3.3D转换方法 1.rotateX() 2.rotateY() <!DOC

利用原生JS实现网页1920banner图滚动效果

内容描述:随着PC设备硬件性能的进步和分辨率的不断提高,现在主流网站逐渐开始采用1920banner图,为适应这一趋势,博主设计了1920banner图的滚动效果,代码利用了原生JS实现了1920banner图的切换效果,并针对低分辨率电脑设备进行了适配,实现了JS代码与HTML代码的完全分离,符合w3c的标准使用规范,希望能给各位开发者朋友以帮助和参考.如发现有缺陷和不足,欢迎大家予以指正,如有更好的意见或解决方法,可在评论区交流互动.一下为代码内容: <!DOCTYPE html> <

JS学习笔记(一): 使用原生JS 实现导航栏下多级分类弹出效果

在给静态页面静添加交互效果时遇到的问题 : 鼠标划入二级菜单时 一级菜单样 ":hover" 式无法保持 情景如下: 解决思路: 利用二级菜单的onmouseover/out事件 重新构建一级菜单 ".hover" 样式类 代码如下: CSS部分: 在原来的目标:hover样式中 增加 .hover状态 li.app_jd a:hover,li.app_jd a.hover{ background-position: -126px -397px; } li.serv