zoukankan      html  css  js  c++  java
  • scrollIntoView的使用

    最近做一个小需求,就是类似vue文档这样的布局

    上面是固定的header,左边是导航,右边是内容,并且点击左边的导航项,跳转到对应的内容区域

    布局上可以用传统的position就可以实现,当然也可以使用flex布局,(项目中使用了flex,还是要尽量使用新技术的嘛,毕竟兼容性也很良好了)

    跳转定位一开始想用a标签的锚点定位,后来无意中发现了scrollIntoView这个东东,在网上百度,发现w3c并没有相关介绍,但是有很多技术博客讲到了,兼容性也还好,并且可以实现动画效果,这个还是比较赞的,因为一开始考虑到想做的体验好一些,想要加动画,但是锚点本身并没有动画,还是需要用js来实现,就麻烦了。

    下面展示布局和跳转的demo代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                padding:0;
                margin:0;
            }
            html,body{
                100%;
                height:100%;
            }
            .box{
                height:100%;
            }
            .header{
                position: fixed;
                top:0;
                left:0;
                height:60px;
                line-height:60px;
                100%;
                background:pink;
                text-align: center;
            }
            .content{
                box-sizing: border-box;
                height:100%;
                100%;
                padding-top:60px;
                position:relative;
            }
            .left{
                position:absolute;
                top:60px;
                left:0;
                bottom:0;
                300px;
                border-right:1px solid green;
                overflow: auto;
            }
            .right{
                position:absolute;
                top:60px;
                left:300px;
                bottom:0;
                right:0;
                overflow:auto;
            }
            .right div{
                box-sizing: border-box;
                height:100px;
            }
        </style>
    </head>
    <body>
    <div class="box">
        <div class="header">header</div>
        <div class="content">
            <div class="left">
                <ul>
                    <li id="one">一</li>
                    <li id="two">二</li>
                    <li id="three">三</li>
                    <li id="four">四</li>
                    <li id="five">五</li>
                    <li id="six">六</li>
                    <li id="seven">七</li>
                    <li id="eight">八</li>
                    <li id="nine">九</li>
                    <li id="ten">十</li>
                </ul>
            </div>
            <div class="right">
                <div id="one-content" style="height:100px;">
                    内容一
                </div>
                <div id="two-content" style="height:100px">
                    内容二
                </div>
                <div id="three-content" style="height:100px">
                    内容三
                </div>
                <div id="four-content" style="height:100px">
                    内容四
                </div>
                <div id="five-content" style="height:100px">
                    内容五
                </div>
                <div id="six-content" style="height:100px">
                    内容六
                </div>
                <div id="seven-content" style="height:100px">
                    内容七
                </div>
                <div id="eight-content" style="height:100px">
                    内容八
                </div>
                <div id="nine-content" style="height:100px">
                    内容九
                </div>
                <div id="ten-content" style="height:100px">
                    内容十
                </div>
            </div>
        </div>
    </div>
    </body>
    </html>
    <script>
        var oLis = document.querySelectorAll('.left li');
        Array.prototype.forEach.call(oLis,function (item) {
          item.addEventListener('click',function () {
            document.querySelector('#'+item.id+'-content').scrollIntoView();
          })
        })
    </script>
    

      

    scrollIntoView可接受参数ture/false ,object

    true滚动到窗口的顶部,false滚动到窗口的底部

    object有两个属性,block是start表示滚动到窗口的顶部,end表示滚动到窗口的底部,behavior表示动画的效果

    不支持object参数的浏览器,默认是没有动画的跳转。

    这里值得注意的是上面demo中,因为.content定位了,所以每一个元素都跳转到了.content的顶部的位置,如果.content不定位,

    每一个元素会跳转到body也就是整个窗口的顶部,此时要是想要显示在正确的位置

    可以增加每一个元素的高度,来实现,vue的官方文档就是用这个方法来实现的,

    不过他用的是锚点定位。

  • 相关阅读:
    当Table中td内容为空时,让它显示边框的办法
    超链接可以是JS代码
    学习Filter
    关于SQL语句的拼接问题
    复习JSP时遇到的几个问题
    凡是项目中的增删改都要加事务
    Xshell和SecureCRT连不上VMware虚拟机linux系统
    IBM AIX定义数组变量
    Python模块之re 正则表达式
    Python模块之itertools 用于创建和使用迭代器的函数工具
  • 原文地址:https://www.cnblogs.com/lijianjian/p/9448153.html
Copyright © 2011-2022 走看看