javascript实现无兼容性问题返回顶部

    今天继续学习javascript,有一点php基础,感受基础仍是挺容易掌握的.听了老师的一节课,讲的document.documentElement.scrollHeight,当时老师作了一个返回顶部的小例子,听完课准备本身试一下,结果令我很惊讶,我发现这个东西竟然有兼容性问题.javascript

      

    固然了遇见问题就得解决,我用了四个浏览器做测试,分别为:谷歌,ie,苹果,火狐.
php

    结果:document.documentElement.scrollHeight->ie与火狐是咱们预想的结果.( 即整个文件的                    html的高度)
html

            document.body.scrollHeight->苹果与谷歌的效果同样(即获取的是body的高度).
java

    住:这里的兼容性问题并非获取不到内容,而是获取的内容是相反的.
浏览器

    

    因此利用咱们上面的出的结论:咱们能够用三元运算符即那个大取哪一个,就能解决这个问题,以下ide

                var h=document.documentElement.scrollHeight;  //ie+火狐函数

var h1=document.body.scrollHeight;  //苹果+谷歌学习

var ht=h-h1>0?h:h1;  //在ie和火狐中:h>h1,在苹果和谷歌中:h<h1;因此二者取大的,那么                                                            就能获取到咱们想要的的值测试

一样这个document.documentElement.scrollTop也有兼容性问题,这个相对简单咱们能够直接用"||"运算符就能够了.以下:spa

var top=document.body.scrollTop(火狐与ie为0) ||                                                                                      document.documentElement.scrollTop(谷歌和苹果位0);


 解决了这个问题,那么返回顶部就变得很是简单了,以下:

    

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>首页</title>

</head>

<body>

<div id="divid" style="width:100px;height:100px;border:5px solid #f00"></div>

<h1>aaa</h1>

<h1>bbb</h1>

<h1>ccc</h1>

<h1>001</h1>

<h1>002</h1>

<h1>003</h1>

<h1>004</h1>

<h1>005</h1>

<h1>006</h1>

<h1>007</h1>

<h1>008</h1>

<h1>009</h1>

<h1>010</h1>

<h1>011</h1>

<h1>012</h1>

<h1>013</h1>

<h1>014</h1>

<h1>015</h1>

<img src="p_w_picpaths/ali/101.gif" id="imgid" style="position:fixed;right:25px;bottom:25px;display:none" alt="">

</body>

<script>

var imgobj=document.getElementById('imgid');

var time=null;

window.onscroll=function()

{

var h=document.documentElement.scrollHeight;

var h1=document.body.scrollHeight;

var ht=h-h1>0?h:h1;

var top=document.body.scrollTop || document.documentElement.scrollTop;

var cHeight=document.documentElement.clientHeight;

var xheight=ht-top;

if(xheight-cHeight<=60)

{

imgobj.style.display='block';

}

else

{

imgobj.style.display='none';

}

}


imgobj.onclick=function(){

time =setInterval(get,5);

function get(){

var top=document.body.scrollTop || document.documentElement.scrollTop;

if(top==0)

{

clearInterval(time);

}

window.scrollBy(0,-25);

}

}

</script>

</html>


注:js不像php的变量做用域那样,在函数外部定义的全部的变量均有全局做用域,在函数内部定义的变量使用"var"关键字定义的变量只能在函数内部使用,直接定义的享有全局做用域.


这个demo除了在ie内部滚动的速度稍微慢了点以外,没有兼容性问题.

相关文章
相关标签/搜索