各种滚动

1,指定元素的出现位置

// start出现在视口顶部、center出现在视口中央、end出现在视口底部
document.querySelector(".box").scrollIntoView({
  block: "start" || "center" || "end"
});

在这里插入图片描述

2,设置滚动具有平滑的过渡效果

window.scrollTo({
  behavior: "smooth"
});

window.scrollBy({
  behavior: "smooth"
});

document.querySelector(".box").scrollIntoView({
  behavior: "smooth"
});

利用css

或者用css属性设置:
html {
  scroll-behavior: smooth; // 全局滚动具有平滑效果
}

// 或者所有
* {
 scroll-behavior: smooth;
}

3,解决IOS设备局部滚动不顺畅(粘手)

.box {
  -webkit-overflow-scrolling: touch;
}

4,滚动传播

指有多个滚动区域,当一个滚动区域滚动完之后,继续滚动会传播到到父区域继续滚动的行为:

.box {
  overscroll-behavior: contain; // 阻止滚动传播
}

在这里插入图片描述
在这里插入图片描述

5,横向滚动

<div class="box">
    <ul>
        <li>
            <img src="../assents/aa.jpg">
        </li>
        <li>
            <img src="../assents/bb.jpg">
        </li>
        <li>
            <img src="../assents/cc.jpg">
        </li>
        <li>
            <img src="../assents/dd.jpg">
        </li>
    </ul>
</div>


.box{
            width: 500px;
            height: 200px;
            overflow: hidden;
        }
        ul{
          /*超出不换行*/
            white-space: nowrap;   
            overflow-x: auto;
            cursor: pointer;
        }
        li{
            display: inline-block;
        }
        li img{
            display: block;
            width: 200px;
            height: 200px;
        }

在这里插入图片描述
滚动结束后,强制滚动到指定元素
基于上面的例子,我们设置如下属性:

 <style>
        .box{
            width: 500px;
            height: 200px;
            overflow: hidden;
        }
        ul{
            /*超出不换行*/
            white-space: nowrap;
            overflow-x: auto;
            cursor: pointer;
            scroll-snap-type: x mandatory;
        }
        li{
            display: inline-block;
            scroll-snap-align: start;
        }
        li img{
            display: block;
            width: 400px;
            height: 200px;
        }
    </style>

效果如下:
在这里插入图片描述
仔细看会发现,我们松手的时候,会将最近的元素滚动到最右边(初始位置,对于Y轴来讲就是顶部,X轴则是右边)

也可以设置出现在中间:

<style>
        .box{
            width: 500px;
            height: 200px;
            overflow: hidden;
        }
        ul{
            /*超出不换行*/
            white-space: nowrap;
            overflow-x: auto;
            cursor: pointer;
            scroll-snap-type: x mandatory;
        }
        li{
            display: inline-block;
            scroll-snap-align: center;
        }
        li img{
            display: block;
            width: 400px;
            height: 200px;
        }
    </style>

效果如下:
在这里插入图片描述

6,横向滚动一屏

<div class="box">
    <ul>
        <li>
            <img src="../assents/aa.jpg">
        </li>
        <li>
            <img src="../assents/bb.jpg">
        </li>
        <li>
            <img src="../assents/cc.jpg">
        </li>
        <li>
            <img src="../assents/dd.jpg">
        </li>
        <li>
            <img src="../assents/cc.jpg">
        </li>
        <li>
            <img src="../assents/dd.jpg">
        </li>
        <li>
            <img src="../assents/cc.jpg">
        </li>
        <li>
            <img src="../assents/dd.jpg">
        </li>
    </ul>
</div>
 <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
             width: 100vw;
             height:80vh;
             overflow: hidden;
         }
        ul{
            /*超出不换行*/
            white-space: nowrap;
            overflow-x: scroll;
            cursor: pointer;
            scroll-snap-type: x mandatory;
            list-style: none;
        }
        li{
            display: inline-block;
            width: 100vw;
            height: 50vh;
            scroll-snap-align: center;

        }
        li img{
            display: block;
            width:100%;
            height: 100%;
        }
    </style>

6,纵向滚动一屏

<div class="box">
    <ul>
        <li>
            <img src="../assents/aa.jpg">
        </li>
        <li>
            <img src="../assents/bb.jpg">
        </li>
        <li>
            <img src="../assents/cc.jpg">
        </li>
        <li>
            <img src="../assents/dd.jpg">
        </li>
        <li>
            <img src="../assents/cc.jpg">
        </li>
        <li>
            <img src="../assents/dd.jpg">
        </li>
    </ul>
</div>
 <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
             width: 100vw;
             height:100vh;
             overflow: hidden;
         }
        ul{
            overflow-y: scroll;
            scroll-snap-type: y mandatory;
            list-style: none;
            /*一定要给ul高度,不然你不能滚动*/
            height:5000px;
        }
        li{
            display: block;
            width: 100vw;
            height:100vh;
            scroll-snap-align: start;
        }
        li img{
            display: block;
            width:100%;
            height: 100%;
        }
    </style>

在这里插入图片描述

发布了42 篇原创文章 · 获赞 4 · 访问量 6115

猜你喜欢

转载自blog.csdn.net/qq_43427385/article/details/100924288