iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >原生js实现页面滚动动画
  • 959
分享到

原生js实现页面滚动动画

2024-04-02 19:04:59 959人浏览 安东尼
摘要

本文实例为大家分享了js实现页面滚动动画的具体代码,供大家参考,具体内容如下 需求: 1 页面滚动到对应板块,左侧对应的索引高亮2 点击左侧的索引,滚动到对应的板块 代码如下,直接

本文实例为大家分享了js实现页面滚动动画的具体代码,供大家参考,具体内容如下

需求:

1 页面滚动到对应板块,左侧对应的索引高亮
2 点击左侧的索引,滚动到对应的板块

代码如下,直接拷贝到html文件就可以使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style> 
        html, body, ul {
            margin: 0;
            padding: 0;
        }
        .section li {
            height: 400px;
        }
        li {
            list-style: none;
        }
        .indexs {
            width: 40px;
            background-color: #000000;
            color: #ffffff;
            position: fixed;
            left: 20px;
            bottom: 50px;
            display: none;
        }
        .indexs.active {
            display: block;
        }
        .indexs li {
            padding: 10px;
            text-align: center;
            user-select: none;
        }
        .indexs li.addcolor {
            background-color: red;
        }
        header {
            height: 1000px;
            background-color: purple;
        }
        footer {
            height: 200px;
            background-color: rgb(15, 218, 15);
        }
    </style>
</head>
<body>
    <header></header>
    <ul class="section">
        <li style="background-color: palegreen;">1</li>
        <li style="background-color: rgb(15, 218, 15);">2</li>
        <li style="background-color: rgb(24, 203, 209);">3</li>
        <li style="background-color: rgb(167, 152, 251);">4</li>
        <li style="background-color: rgb(251, 152, 165);">5</li>
        <li style="background-color: palegreen;">6</li>
        <li style="background-color: rgb(15, 218, 15);">7</li>
        <li style="background-color: rgb(24, 203, 209);">8</li>
        <li style="background-color: rgb(167, 152, 251);">9</li>
        <li style="background-color: rgb(251, 152, 165);">10</li>
    </ul>
    <ul class="indexs">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
    </ul>
    <footer></footer>
    <script src="https://cdn.bootcdn.net/ajax/libs/Jquery/3.5.1/jquery.js"></script>
    <script type="text/javascript">

        let scrollTop = 0

        let section = document.querySelector('.section')

        let sectionLi = document.querySelectorAll('.section li')

        let indexs = document.querySelector('.indexs')

        let indexsLi = document.querySelectorAll('.indexs li')

        let ofseTop = 0
        
        let requestId = null
        
        let recordScrollTop = 0
        // 页面滚动方向
        let scrollDirection = null
        let diffX = 0
        let diffY = 0
        let scrollAction = {x: 'undefined', y: 'undefined'}
        let lastI = 0
        let direction = null

        window.onscroll = myScroll
        
        function myScroll(e) {

            scrollTop = document.body.scrollTop || document.documentElement.scrollTop

            // 当header滚出去时出现左侧导航
            if (section.offsetTop -scrollTop <= 0) {
                indexs.classList.add('active')
            } else {
                indexs.classList.remove('active')
            }
            // 滚到sectionLi对应的li时候 给indexs对应的li红色高亮
            for (let i = 0; i < sectionLi.length; i++) {

                if(sectionLi[i].offsetTop - scrollTop <= 30) { 
                    for (let j = 0; j < indexsLi.length; j++) {
                        indexsLi[j].classList.remove('addcolor')
                    }
                    indexsLi[i].classList.add('addcolor')
                }
                
            }

        }
        // 点击indexs对应的li 页面滚回到section对应的li
        for (let i = 0; i < indexsLi.length; i++) {
            indexsLi[i].addEventListener('click', function (e) {

                for (let j = 0; j < indexsLi.length; j++) {
                    indexsLi[j].classList.remove('active')
                }
                // i就是被点击的那个li的索引值
                indexsLi[i].classList.add('active')

                // 记录下被点击的li的offsetTop
                ofseTop = sectionLi[i].offsetTop

                // 第一种方法 jquery 动画 这里不用jquery 用requestAnimationFrame
                // $('html,body').animate({ 
                //     scrollTop: ofseTop
                // }, 300)
                
                // 第二种方法 requestAnimationFrame
                if(i - lastI > 0) {
                    direction = 'down'
                } else if(i - lastI < 0){
                    direction = 'up'
                } 
                // 更新lastI
                lastI = i
                
                // 记录点击li的时候 当前页面卷出去了多少
                recordScrollTop = document.body.scrollTop || document.documentElement.scrollTop
                requestId = requestAnimationFrame(scrollAnimate)
            })
        }
        
        

        function scrollAnimate(){
            // 滚动条向下滚动 页面向上翻 当前页面卷出去更多
            if (direction && direction === 'down') {
                recordScrollTop += 30
                if (recordScrollTop >= ofseTop) {
                    direction = null
                    return cancelAnimationFrame(requestId)
                }

            }
            // 滚动条向上滚动 页面向下翻 当前页面卷出去更少
            if (direction && direction === 'up') {
                recordScrollTop -= 30
                if (recordScrollTop <= ofseTop) {
                    direction = null
                    return cancelAnimationFrame(requestId)
                }
            }
            

            document.body.scrollTop = recordScrollTop
            document.documentElement.scrollTop = recordScrollTop
            requestId = requestAnimationFrame(scrollAnimate)
            
        }

        // 人为鼠标滚动判断页面滚动方向 这个函数在这个案例用不到
        function scrollFunc() {
            if (typeof scrollAction.x == 'undefined') {
                scrollAction.x = window.pageXOffset
                scrollAction.y = window.pageYOffset
            }
            diffX = scrollAction.x - window.pageXOffset
            diffY = scrollAction.y - window.pageYOffset
            if (diffX < 0) {
                // Scroll right
                scrollDirection = 'right'
            } else if (diffX > 0) {
                // Scroll left
                scrollDirection = 'left'
            } else if (diffY < 0) {
                // Scroll down
                scrollDirection = 'down'
            } else if (diffY > 0) {
                // Scroll up
                scrollDirection = 'up'
            } 
            scrollAction.x = window.pageXOffset
            scrollAction.y = window.pageYOffset
        }
    </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 原生js实现页面滚动动画

本文链接: https://www.lsjlt.com/news/162146.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 原生js实现页面滚动动画
    本文实例为大家分享了js实现页面滚动动画的具体代码,供大家参考,具体内容如下 需求: 1 页面滚动到对应板块,左侧对应的索引高亮2 点击左侧的索引,滚动到对应的板块 代码如下,直接...
    99+
    2022-11-12
  • JavaScript 实现页面滚动动画
    目录创建布局添加 CSS 样式用 JavaScript 操作元素获取目标元素默认淡出所有目标元素检测元素是否在视窗内给元素添加类名完善示例利用节流阀提高性能在做前端 UI 效果时,让...
    99+
    2022-11-12
  • JavaScript实现页面滚动动画的方法
    小编给大家分享一下JavaScript实现页面滚动动画的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript可以做什么1.可以使网页具有交互性,...
    99+
    2023-06-14
  • 原生JS实现目录滚动特效
    分享一个用原生JS实现的文字滚动效果,这种效果通常用在网页中一些局部展示信息,如新闻、动态、充值记录等,效果如下: 实现代码如下: <!DOCTYPE html> ...
    99+
    2022-11-12
  • 原生js如果实现类似fullpage的单页/全屏滚动效果
    小编给大家分享一下原生js如果实现类似fullpage的单页/全屏滚动效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言单页...
    99+
    2022-10-19
  • JS实现页面滚动到关闭时的位置与不滚动效果
    目录滚动不滚动标题显而易见,要说两种情况:重新打开页面或者返回某个页面时滚动到上次离开时的位置,以及不滚动保持在顶部。 滚动 这也有两种情况:页面重新打开,与返回某个页面。如果是前者...
    99+
    2022-11-13
  • js实现控制整个页面滚动条的位置
    目录js控制整个页面滚动条位置方法一方法二js滚动条属性、设置滚动条滚动速度设置滚动条速度代码示例js控制整个页面滚动条位置 方法一 1、通过div的scrollTop变动控制垂直滚...
    99+
    2022-11-13
    js滚动条 滚动条位置 js控制滚动条位置
  • wow.js实现炫酷的页面滚动伴随动画示例详解
    目录初始化wow.js的配置项对Dom元素进行绑定类名前言 最近接了一个学校招生网站的需求,很常规的H5页面,但是在H5上,需要实现一些动画——随着页面的滚动...
    99+
    2023-02-01
    wow.js页面滚动伴随动画 wow.js页面滚动伴随
  • JS如何实现页面滚动到关闭时的位置与不滚动效果
    这篇文章主要讲解了“JS如何实现页面滚动到关闭时的位置与不滚动效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS如何实现页面滚动到关闭时的位置与不滚动效果”吧!标题显而易见,要说两种情况...
    99+
    2023-06-30
  • 原生Js如何实现简单无缝滚动轮播图
    这篇文章给大家分享的是有关原生Js如何实现简单无缝滚动轮播图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。原简单的滚动轮播代码<html><head>   &...
    99+
    2023-06-15
  • js实现公告自动滚动
    本文实例为大家分享了js实现公告自动滚动的具体代码,供大家参考,具体内容如下 html <div class="test003">           <div ...
    99+
    2022-11-13
  • 原生js如何封装自定义滚动条
    这篇文章主要介绍了原生js如何封装自定义滚动条,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果图:代码如下:<!doctype&nb...
    99+
    2022-10-19
  • css3如何实现小球滚动和js控制动画暂停
    这篇文章给大家分享的是有关css3如何实现小球滚动和js控制动画暂停 的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。CSS3 可以创建动画,它可以取代许多网页动画图像、Flas...
    99+
    2022-10-19
  • vue实现页面刷新动画
    本文实例为大家分享了vue实现页面刷新动画的具体代码,供大家参考,具体内容如下 做一个vue的页面刷新动画,找了好多动画样式,感谢大佬们造的轮子。 主要就是在index.html文件...
    99+
    2022-11-13
  • JavaScript实现页面无缝滚动效果
    本文实例为大家分享了JavaScript实现页面无缝滚动效果的具体代码,供大家参考,具体内容如下 目前我只使用两种方式,如果还有其他方式,希望推荐一下。 1、js+transform...
    99+
    2022-11-13
  • javascript实现全屏页面滚动效果
    在我读完javaScript DOM之后,对解释型的javaScript脚本语言有了更加深刻的感悟和理解,并使我的javaScript代码更加规范化。 接下来,我们转入今天我要分享的...
    99+
    2022-11-12
  • velocity.js实现页面滚动切换效果
    今天介绍一个Javascript的小型的动画插件velocity.js,可以方便高效的开发一个具有多页面滚动切换效果的网站。 浏览器支持 velocity.js支持IE8+、Chro...
    99+
    2022-11-12
  • JS如何判断页面是否有滚动条
    这篇文章主要介绍JS如何判断页面是否有滚动条,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!为什么要判断滚动条判断滚动条的需求在弹窗插件中用的较多,因为弹窗大多会添加 overflow...
    99+
    2022-10-19
  • js怎么实现dom元素横向及纵向滚动的动画
    本篇内容主要讲解“js怎么实现dom元素横向及纵向滚动的动画”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js怎么实现dom元素横向及纵向滚动的动画”吧!通过s...
    99+
    2022-10-19
  • 如何使用原生JS控制多个滚动条同步跟随滚动效果
    这篇文章将为大家详细讲解有关如何使用原生JS控制多个滚动条同步跟随滚动效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在一些支持用 markdown 写文章的网站,后台...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作