• 一个简单的返回顶部效果


    经常会在网页中看到返回顶部的功能,但是大多数都是采用简单的锚点直接定位到顶部,对用户来说显得太突兀,平缓过渡应该是一种比较好的用户体验。

    但是从性能上来讲,直接定位到顶部毋须使用脚本,性能更高。

    这个简单的测试例子效果如下:

    定位到锚点

     

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    测试文本

    返回顶部

    实现脚本如下:

     1 function rt() {
     2     var d = document,
     3     dd = document.documentElement,
     4     db = document.body,
     5     top = dd.scrollTop || db.scrollTop,
     6     step = Math.floor(top / 20);
     7     (function() {
     8         top -= step;
     9         if (top > -step) {
    10             dd.scrollTop == 0 ? db.scrollTop = top: dd.scrollTop = top;
    11             setTimeout(arguments.callee, 20);
    12         }
    13     })();
    14 }

    关于document.documentElement和document.body,在很多相关书籍中都采用下面这种办法:

    var mode = document.compatMode == 'CSS1Compat' ? 'documentElement' : 'body';

    通过判断compatMode来确定浏览器是处于标准模式还是怪异模式(IE),但是Chrome浏览器在处理时稍有不同。

    Chrome浏览器下,document.documentElement.scrollTop 和 document.documentElement.scrollLeft 都为0,取不到正确的数据,而用document.body.scrollTop

    和dcoument.body.scrollLeft则返回正确的数据。不知道在这一点上Chrome为什么脱离了标准。因此在上面代码的第5行使用

    top = dd.scrollTop || db.scrollTop

    来取得相应的scrollTop值,对于Chrome浏览器,取到的是db.scrollTop的值,这样就保证了该功能在几个主浏览器上可以正确运行。代码的后半部分通过间歇调用不断减少

    scrollTop的值直到浏览器顶部。测试的时候没有测Safari,因为最近苹果停止了Safari对PC平台的支持,官网已经不提供Safari下载了。

    这个例子到此还没有结束,可以扩展一下。对于返回顶部的功能,可能会很自然地联想到锚点的功能,在传统的锚点实现上,用户体验也是不太好的,如果定位到一堆

    比较密集的文字中,住住比较耗费眼力。CSS3考虑到了这一点,给元素加入了一个:target伪类,比如点击上面例子中的“定位到锚点”,匹配的地方会以绿色的背景标识,

    看起来醒目。样式代码如下:

    p:target{background-color:#9acd32}

    老式浏览器是不支持这个伪类的,不能用这种效果。

    最后总结一下,通过这个例子学习了以下知识点:

    1.Chrome浏览器中scrollTop的特殊性;

    2.CSS3中:target伪类的使用;

    3.只要声明了<!DOCTYPE>,浏览器不会进入怪异模式,包括IE6,以前一直以为需要声明xhtml1.0才行,可以通过浏览器返回documentElement或body来确认。

    以上是个人的一些心得,希望园友们提出宝贵意见,多多指正。

    转载请注明出处。

  • 相关阅读:
    poj 2112
    写给学大计python的同学的查错方法
    [Win32 API学习] Edit,ListBox的用法,字体的设置
    [Win32 API] FindFirstFile()和FindNextFile()
    初探C++ win32 api——Hello world!
    [学习笔记]舞蹈链(DLX)(C++指针版)
    2020科大回归记
    SCOI2019AFO记
    [学习笔记]动态动态规划/动态DP/DDP
    BZOJ5343[CTSC2018]混合果汁(二分答案+主席树)
  • 原文地址:https://www.cnblogs.com/undefined000/p/2645011.html
Copyright © 2020-2023  润新知