zoukankan      html  css  js  c++  java
  • HTML中 scrollTop++ 不能够实现div向上滚动的原因

    假设有三个层,id分别是:demo,demo1,demo2,包含关系如下:即,demo 包含demo1和demo2;


    HTML代码:

     <div id="demo" style="background-color:#ff0000; 500px;height:200px;overflow: hidden;" >      

      
            <div id="demo1" style="500px;height:200px;background-color:yellow"> 
            </div>


            <div id="demo2" style="500px;height:200px;background-color:pink">       
    </div>
    </div>

    JS代码:

    <script type="text/javascript">
           document.getElementById("demo2").innerHTML=document.getElementById("demo1").innerHTML;
           document.getElementById("demo2").style.backgroundColor="blue"; 
          function  let(){              
                document.getElementById("demo").scrollTop++;        
        }

    var myTime=setInterval("let()",100);
    </script>

    1.外层div 的overflow属性没有设置为“hidden”,不会显示滚动效果;

    2.内层div(这里指的是demo1和demo2)的高度之和没有超过外层div的高度;本例子来说:demo1 高度200 +demo2高度 200=400px必须大于demo的高度200px才会出现滚动。

    3.何时滚动会停止?内部最下面的div(本例子demo2)的底部与外层div(demo)底部齐平时停止滚动!

    如果要不停滚动可以修改js代码:

    <script type="text/javascript">
         document.getElementById("demo2").innerHTML=document.getElementById("demo1").innerHTML;       
         function  let(){ 
    if(document.getElementById("demo").scrollTop>=parseInt(document.getElementById("demo1").style.height)){
       
    document.getElementById("demo").scrollTop=0;

    }
    else{
    document.getElementById("demo").scrollTop++;   
    }
        }  
    var myTime=setInterval("let()",10);
    </script>

    由于style.height属性只能取得行内样式的值,如果换成currentstyle或者document.getComputedStyle("",null)还需要判断,所以最好使用demo2的offsetHeight


    <script type="text/javascript">
         document.getElementById("demo2").innerHTML=document.getElementById("demo1").innerHTML;       
         function  let(){ 
    if(document.getElementById("demo").scrollTop>=document.getElementById("demo2").offsetTop){
       
    document.getElementById("demo").scrollTop=0;

    }
    else{
    document.getElementById("demo").scrollTop++;   
    }
        }  
    var myTime=setInterval("let()",10);
    </script>

    但是这里一定要注意offsetTop包含外层div(demo)的padding,demo2的offsetTop要大于200;也就是说如果demo1的高度和demo2若刚好等于demo的高度则demo的scrollTop永远不会达到临界点即document.getElementById("demo").scrollTop>=document.getElementById("demo2").offsetTop,因为在此之前就停止卷动。scrollTop++没有作用

    经验在于积累----武二郎
  • 相关阅读:
    JAVA多线程之线程的挂起与恢复(suspend方法与resume方法)
    基于Andoird 4.2.2的同步框架源代码学习——同步发起端
    C#MD5为密码加密
    YOUYOU深入学习Ganglia之三(gmetad的软件架构)
    js原生appendChild的bug
    复选框输入Android Studio 如果修改LogCat的颜色,默认全是黑色看着挺不舒服的
    输出目录文件被多个中间文件输出目录相同的工程包含
    数据对象ajax学习篇9
    function设置jsp页面使用js控制文本框只读,并且按下backspace删除按钮后停在原页面
    资源下载南方cass视频教程,包括文档,数据,很全的
  • 原文地址:https://www.cnblogs.com/zhanghai/p/4461236.html
Copyright © 2011-2022 走看看