用js实现滚动加载动画效果

2023-10-27

目录

一、效果图

二、代码部分

1.html结构

2.css样式部分

3.js部分

三、代码总结


一、效果图

可以看出,在悠方滚动条滚动的时候,当高度打到一定高度的时候就会出现一个div盒子,就好像刚加载出来一样

而且可以一直向下滚动。

二、代码部分

1.html结构

    <div class="box">content1</div>
    <div class="box">content2</div>
    <div class="box">content3</div>
    <div class="box">content4</div>

因为主要是后面通过js添加节点,所以结构很简单

2.css样式部分

<style>
        * {
            padding: 0;
            margin: 0;
        }

        html,
        body {
            width: 100vw;
            overflow-x: hidden;
            display: flex;
            justify-content: center;
            align-items: center;
            flex-direction: column;
        }

        .box {
            width: 1200px;
            height: 500px;
            background-color: rgb(195, 135, 235);
            border-radius: 8px;
            font-size: 30px;
            text-align: center;
            line-height: 500px;
            margin-top: 20px;
            color: #fff;
            /* 添加过度效果 */
            transition: transform .5s ease;
        }

        /* 偶数 */
        .box:nth-child(even) {
            transform: translateX(-200%);
        }

        /* 奇数 */
        .box:nth-child(odd) {
            transform: translateX(200%);
        }
        
        .box.show-center {
            transform: translateX(0);
        }
    </style>

注意:因为是将div分别向左右移动了,所以在body的样式中,要加一个width:100vw;overflow-x:hidden,这样就不会出现横向滚动条。

最后写了一个 show-center的类名,当满足条件的时候添加这个类名,就能让当前div居中显示。

3.js部分

 <script>
        //在页面加载完毕后执行一次滚动加载函数
        window.onload = function () {
            scrollLoad()
        }
        //监听滚动
        window.addEventListener('scroll', scrollLoad)
        //定义数值
        var count = 5

        //滚动加载函数
        function scrollLoad() {
            // 1.获取所有的box
            var boxList = document.querySelectorAll('.box')
            //2. 定义一个目标值
            var targetValue = window.innerHeight * 0.8

            //3.获取每一个box距离浏览器顶部的值
            boxList.forEach(function (box) {
                var boxTop = box.getBoundingClientRect().top
                if (boxTop <= targetValue) {
                    box.classList.add('show-center')
                } else {
                    box.classList.remove('show-center')
                }
            })

            createBox()
        }

        //创建box函数
        function createBox() {
            //网页全文高度
            var pageHeight = document.documentElement.scrollHeight
            //滚动条被卷去的高度
            var stop = document.documentElement.scrollTop;
            //窗口高度
            var seeHeight = window.innerHeight
            //滚动条距离底部的高度
            var bottom = pageHeight - stop - seeHeight
            //如果高度小于200 就添加一个节点
            if (bottom <= 200) {
                var div = document.createElement('div')
                div.classList.add('box');
                div.innerHTML = 'content' + count;
                count++
                document.body.appendChild(div)
            }
        }
    </script>

1.在滚动函数:scrollLoad中 用到了getBoundingClientRect().top

getBoundingClientRect()  //获取元素位置,这个方法没有参数

该函数返回一个Object对象,该对象有6个属性:top,lef,right,bottom,width,height;

  1. top:元素上边到视窗上边的距离;

  2. right:元素右边到视窗左边的距离;

  3. bottom:元素下边到视窗上边的距离;

  4. left:元素左边到视窗左边的距离;

  5. width:是元素自身的宽

  6. height是元素自身的高

 

这里我们只关注它的top值,前面定了一个目标值targetValue为页面高度的80%,当当前元素的高度小于这个高度时,给它添加show-center类使它回到居中的位置,如果小于的话,就删除这个类。

 2.createBox() 函数用来判断滚动条的高度,如果距离底部小于200px的话就创建一个新节点添加到body中。

这样一个一直滚动一直更新节点的效果就完成了。

三、代码总结

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        html,
        body {
            width: 100vw;
            overflow-x: hidden;
            display: flex;
            justify-content: center;
            align-items: center;
            flex-direction: column;

        }

        .box {
            width: 1200px;
            height: 500px;
            background-color: rgb(195, 135, 235);
            border-radius: 8px;
            font-size: 30px;
            text-align: center;
            line-height: 500px;
            margin-top: 20px;
            color: #fff;
            /* 添加过度效果 */
            transition: transform .5s ease;
        }

        /* 偶数 */
        .box:nth-child(even) {
            transform: translateX(-200%);
        }

        /* 奇数 */
        .box:nth-child(odd) {
            transform: translateX(200%);
        }

        .box.show-center {
            transform: translateX(0);
        }
    </style>
</head>

<body>
    <div class="box">content1</div>
    <div class="box">content2</div>
    <div class="box">content3</div>
    <div class="box">content4</div>

    <script>
        //在页面加载完毕后执行一次滚动加载函数
        window.onload = function () {
            scrollLoad()
        }
        //监听滚动
        window.addEventListener('scroll', scrollLoad)
        //定义数值
        var count = 5

        //滚动加载函数
        function scrollLoad() {
            // 1.获取所有的box
            var boxList = document.querySelectorAll('.box')
            //2. 定义一个目标值
            var targetValue = window.innerHeight * 0.8

            //3.获取每一个box距离浏览器顶部的值
            boxList.forEach(function (box) {
                var boxTop = box.getBoundingClientRect().top
                console.log(box.getBoundingClientRect());
                if (boxTop <= targetValue) {
                    box.classList.add('show-center')
                } else {
                    box.classList.remove('show-center')
                }
            })

            createBox()
        }

        //创建box函数
        function createBox() {
            //网页全文高度
            var pageHeight = document.documentElement.scrollHeight
            //滚动条被卷去的高度
            var stop = document.documentElement.scrollTop;
            //窗口高度
            var seeHeight = window.innerHeight
            //滚动条距离底部的高度
            var bottom = pageHeight - stop - seeHeight
            //如果高度小于200 就添加一个节点
            if (bottom <= 200) {
                var div = document.createElement('div')
                div.classList.add('box');
                div.innerHTML = 'content' + count;
                count++
                document.body.appendChild(div)
            }
        }
    </script>
</body>

</html>

  感谢大家浏览!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用js实现滚动加载动画效果 的相关文章

  • 固定宽度可变高度网格CSS

    我们如何在网格布局中实现固定宽度和可变高度 就像www pinterest com http www pinterest com主页布局 我认为他们正在使用 Javascript 只是想知道是否还有其他方法 只需使用float left不管
  • 从 MVC 中的 FormCollection 获取选定的下拉列表值

    我有一个使用 MVC 发布到操作的表单 我想从操作中的 FormCollection 中提取选定的下拉列表项 我该怎么做 我的 HTML 表单
  • 动态表单标签宽度的 CSS

    我目前正在重构我们的表单控制器之一 以便我们可以将其用于面向公众的网站 目前它正在为表单生成表格布局 但我正在尝试使用 CSS 表单来完成它 我正在尝试重现看起来像这样的东西http www stylephreak com uploads
  • 如何隐藏 URL 中的锚标记

    如何隐藏地址栏中以下链接 href 的哈希值 a href index php dev name 所以它会将我重定向到index php dev name 但我希望地址栏只显示index php 您可以使用 Javascript oncli
  • CSS设置默认滚动位置

    有没有办法将滚动位置设置为默认值 我知道如何在 javascript 中做到这一点 例如使用 jquery div divWithScroll attr scrollTop 200 但我只想用CSS来做 我不知道是否可行 不 CSS 中没有
  • div 边框上的内边距

    我想在 css 边框上添加填充 将其拉入 div 内 远离边缘 使用 css 可以吗 css3 很好 webkit 这是设计 我通过将一个 div 放在一个 div 中 然后给内部 div 一个边框来做到这一点 我想让标记尽可能精简 所以如
  • 在 HTML5 中创建可拖动和可缩放的网格

    与其他 HTML5 不同如何创建网格问题 我想知道如何制作一个可拖动且可扩展的 绘制网格非常简单 var c document getElementById canvas var ctx c getContext 2d var width
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • 用隐藏单元格补充 colspanned 表格有什么不好吗?

    我一直在表格上开发一些排序和选择功能 我发现在具有跨单元格的表格中定位非常困难 我只是添加了跨区单元格并将其隐藏 它看起来不错 它与我的 js 一起工作 非常适合索引 但我想知道这是否是合法的方法 stuffing display none
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • 为什么需要重置浏览器?

    好吧 我知道这可能不是最好的标题why我们需要重置浏览器 因为浏览器有不同的默认设置 我的问题太长 无法放入标题中 如果每个人 90 的时间都需要使用重置样式表 为什么浏览器需要设置默认样式 无论如何我们都会删除它们 对吗 因为某些规则默认
  • 如何使用canvas.toDataURL()将画布保存为图像?

    我目前正在构建一个 HTML5 Web 应用程序 Phonegap 本机应用程序 我似乎不知道如何将画布保存为图像canvas toDataURL 有人可以帮我吗 这是代码 有什么问题吗 我的画布被命名为 canvasSignature J
  • 按百分比设置 bootstrap 模态身高

    我正在尝试制作一个带有主体的模态 当内容变得太大时 该主体会滚动 但是 我希望模式能够响应屏幕尺寸 当我将最大高度设置为 40 时 它没有任何效果 但是 如果我将最大高度设置为 400px 它会按预期工作 但不会响应 我确信我只是错过了一些
  • 如何使用 JavaScript 获取没有 HTML 元素的纯文本?

    我的 HTML 中有 1 按钮和一些文本 如下所示 function get content I don t know how to do in here
  • 如何通过php获取网页的Open Graph协议?

    PHP 有一个简单的命令来获取网页的元标记 get meta tags 但这仅适用于具有名称属性的元标记 然而 开放图谱协议如今变得越来越流行 从网页获取 opg 值的最简单方法是什么 例如 我看到的基本方法是通过 cURL 获取页面并使用
  • 在d3.js中将2D形状转换为3D,并根据ANGULAR中的值调整高度

    我正在使用 d3 js v6 创建以下 2D 图表表示的 3D 图表 这个圆圈中有多个正方形 每个正方形都根据值分配了一种颜色 值越大 正方形越暗 现在我想将其转换为 3D 形状 其中当值变高时 只有特定正方形的高度会增加 因此结果在某种程
  • 使用 JS 合并具有相同值的相邻 HTML 表格单元格

    我已经为此苦苦挣扎了一段时间 我有一个根据一些 JSON 数据自动生成的表 该数据可能会有所不同 我想合并第一列中具有相同值的相邻单元格 例如此表中的 鱼 和 鸟 table tr td fish td td salmon td tr tr
  • JSTL 在循环中每 5 个字段集创建一个新行

    您好 我目前正在迭代并在表中显示字段集列表 为了让布局变得更得体一些 我想在每次循环到达第五个字段集时创建一个新行 谢谢 JSP div class det table class det tr td td tr table div
  • 为范围旋钮 ionic-range 添加边框颜色

    我正在使用离子范围添加范围滑块 并想向范围旋钮添加边框 由于它的 ionic4 和范围旋钮是 Shadow dom 的一部分 我无法使用范围旋钮的 border 属性直接更改边框 我已附上我想要实现的图像 范围旋钮周围有白色边框 现有属性只
  • 带显示块的SPAN

    和默认有什么区别 div 元素和默认值 span 元素与display block HTML 元素的有效性和语义存在差异 否则它们是相同的 div and span两者都被定义为通用容器 在 HTML 方面没有更深层次的含义 一个默认为块显

随机推荐

  • 此url不支持http方法get_http协议(三)几种数据传输方式

    参考 老张http协议 三 几种数据传输方式 http协议的一些特点 1 无状态 http协议是一种自身不对请求和响应之间的通信状态进行保存的协议 即无状态协议 这种设置的好处是 更快的处理更多的请求事务 确保协议的可伸缩性 不过随着web
  • [机缘参悟-75]:谈谈“玻璃心”与“钝感力”

    目录 何谓 玻璃心 呢 钝感力 1 不要做毫无根据的猜想 2 学会从多个角度看问题 3 常常剖析自己的内心 4 感谢周遭的嫉妒和嘲讽 5 提高适应环境的能力 6 树立强势文化思维 7 修炼自己的自我觉知的层次 何谓 玻璃心 呢 从字面意思上
  • 冒泡排序 Bubble Sort

    冒泡排序 Bubble Sort 基本概念 冒泡排序的实现 时间复杂度 和 空间复杂度 稳定性 冒泡排序优化 基本概念 不断比较相邻的两个数 如果大于右边的数就交换 swap 直到末尾 这样最后一个元素就是最大的数 重复n次 排序完成 Ex
  • Learning to Navigate for Fine-grained Classification 论文学习

    Learning to Navigate for Fine grained Classification 论文地址 参考博客 介绍 问题描述 细粒度分类任务是用来区分上一级公共类的子类 例如野生鸟类 汽车型号 这些子类通常是由各个领域专家根
  • Qt——打开QT项目时只有.pro文件,头文件、源文件都不见了(涉及高低版本Qt的Kits工具,Could not find qmake spec ‘default‘.Error while par

    注意 若转载 请贴上链接 https blog csdn net qq 41042595 article details 126244047 如若发现抄袭或未标明来源现象 都可举报反馈 文章目录 前提 问题的由来 问题分析 回想 解决方案
  • C# JSON解析

    根据节点一层一层寻找 如果节点包含数组 则用JArray来访问 根据节点寻找 public string GetJsonResult string JSON string Result new string 2 JObject MyJObj
  • Linux 文件权限

    目录 1 查看文件权限 2 rwx 的意义 3 改变文件属性与权限 3 1 rwx 与 421 3 2 改变文件权限 chmod 3 3 改变文件所属组群 chgrp 3 4 改变文件所有者 chown Linux下一切皆文件 Linux中
  • python爬虫之模拟登录

    最近应朋友要求 帮忙爬取了小红书创作平台的数据 感觉整个过程很有意思 因此记录一下 在这之前自己没怎么爬过需要账户登录的网站数据 所以刚开始去看小红书的登录认证时一头雾水 等到一步步走下来 最终成功 思路通了感觉其实还是很简单 解决思路 一
  • 【课程作业经验】基于MIndSpore波士顿房价数据预测

    基于mindspore实现全连接网络的波士顿数据集房价预测 北京理工大学邱小尧 写本次帖子是基于机器学习实践课程完成的相关使用mindspore深度学习框架完成的任务 写一些分享心得 本次实验我们预采用mindspore进行 数据导入与准备
  • python学习之10行代码制作炫酷的词云图(匹配指定图形形状)

    文章目录 前言 一 需要准备什么 二 代码实现 示例 三 读入数据 四 结果展示 五 修改词云颜色后的运行结果展示 总结 前言 想必大家有一个问题 什么是词云呢 词云又叫名字云 是对文本数据中出现频率较高的 关键词 在视觉上的突出呈现 形成
  • 使用nrm 方式 管理npm 仓库

    管理npm的仓库的方式有很多种 使用nrm 也是比较推荐的一个方式 官网链接 大概说一下常用的命令 npm install g nrm 全局安装nrm 安装之后我们可以查看有哪些仓库 nrm ls http t zoukankan com
  • 首款国产操作系统面世,比Windows更美观,个人用户永久免费

    本文来自洞见网http www localonline com cn 文章链接 http www localonline com cn kuaibao 921 html 转载请注明出处 说到电脑操作系统 基本上所有人想到第一个名字肯定是Wi
  • 通过 node 创建 web 服务器 (Vue项目上线优化 七)

    通过node创建服务器 在vue shop vue shop是项目文件夹名 同级创建一个文件夹vue shop server存放node服务器 使用终端打开vue shop server文件夹 输入命令 npm init y 初始化包之后
  • springboot整合mybatis之二:mapper.xml文件位置

  • 深度学习总结(一)各种优化算法

    参考博文 码农王小呆 https blog csdn net manong wxd article details 78735439 深度学习最全优化方法总结 https blog csdn net u012759136 article d
  • 矢量vector之间用等号赋值的问题

    结论 可以 在程序上编个小程序试试就能知道了 vector v1 v1 pushback 2 v1 pushback 3 v1 pushback 4 vector v2 v1 cout lt lt v2 0 lt lt v2 1 lt lt
  • StringUtils 工具类 详细介绍

    https blog csdn net laukicn article details 69230022
  • Java 程序员,真的不能去外包吗?

    Java程序员是可以去外包的 外包公司通常会为客户提供技术服务 包括程序开发 系统维护和支持等 作为Java程序员 如果你有较强的Java技能 那么可以考虑去外包公司工作 在外包公司工作的优势包括 有机会去不同的客户处工作 能够更多地接触不
  • shell 脚本day4之 sed应用

    应用sed编写的点名器 root zabbix server day4 more name txt 李白 杜甫 白居易 孟浩然 苏轼 root zabbix server day4 more roll sh bin bash 功能描述 De
  • 用js实现滚动加载动画效果

    目录 一 效果图 二 代码部分 1 html结构 2 css样式部分 3 js部分 三 代码总结 一 效果图 可以看出 在悠方滚动条滚动的时候 当高度打到一定高度的时候就会出现一个div盒子 就好像刚加载出来一样 而且可以一直向下滚动 二