JS动态计算自动滚动距离

这篇具有很好参考价值的文章主要介绍了JS动态计算自动滚动距离。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先上效果

JS动态计算自动滚动距离,javascript,开发语言,ecmascript

分析

  1. 在HTML部分,通过Vue的指令 v-for 循环生成了20个表格项,每个表格项的样式根据其奇偶性设置为不同的类名。
  2. 在Vue实例中,定义了一个名为 startAnimation 的方法,用于计算并设置动画效果。
  3. startAnimation 方法首先获取表格容器的高度和所有表格项的高度,然后根据高度差判断是否需要进行滚动动画。
  4. 如果表格内容高度大于容器高度,计算需要移动的高度,并设置每个表格项的初始位置和动画效果。
  5. 点击按钮时触发 clickad 方法,调用 startAnimation 方法开始滚动动画。

原理

  1. 通过获取表格容器的高度和表格项的高度,判断是否需要进行滚动动画。
  2. 如果需要滚动动画,根据内容高度和容器高度计算动画持续时间,并设置每个表格项的初始位置和动画效果。
  3. 动画效果通过CSS的 transform 属性和 @keyframes 关键帧动画来实现

使用场景

  1. 此代码适用于需要展示大量数据的表格,并且希望以滚动动画的方式展示内容。
  2. 可以用于网页中的数据列表、新闻滚动、聊天记录等场景

具体实现代码(如果用到vue项目中的css要取消scoped否则不生效)

<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>星空</title>
    <style lang="scss">
        .table-container {
            height: 300px;
            overflow: auto;
            border: 1px solid #08e6e4;
            text-align: center;
            line-height: 108px;
        }

        .on {
            width: 100px;
            height: 100px;
            background-color: #08e6e4;
        }

        .off {
            width: 100px;
            height: 100px;
            background-color: #f21;

        }

        @keyframes scrollTable {
            0% {
                transform: translateY(0);
            }

            100% {
                /* transform: translateY(-2000%); */
            }
        }

        .clickad {
            cursor: pointer;
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="table-container" ref="tableContainer">
            <div v-for="number in 20" :key="number" class="table-item"
                :class="{ on: number % 2 == 0, off: number % 2 != 0 }">
                <div class="names"> {{number}} </div>
            </div>
        </div>
        <button class="clickad" @click="clickad">点击滚动</button>
    </div>
    </div>
    <!-- cdn引入vue -->
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.2/vue.js"></script>
    <script>
        // 初始化
        new Vue({
            el: "#app",
            data() {
                return {
                };
            },
            methods: {
                // 动态计算方法
                startAnimation() {
                    const container = document.querySelector('.table-container');
                    const tableItems = document.querySelectorAll('.table-container .table-item');
                    const containerHeight = container.offsetHeight; // 获取容器的高度
                    let tableHeight = 0;
                    tableItems.forEach((item) => {
                        console.log(item);
                        tableHeight += item.scrollHeight; // 累加每个表格项的高度
                    });
                    if (containerHeight < tableHeight) {
                        const translateYDistance = -(tableHeight - containerHeight); // 计算需要移动的高度
                        tableItems.forEach((item) => {
                            item.style.transform = `translateY(${translateYDistance}px)`; // 设置初始位置
                            console.log(item.style.transform);
                        });
                        const animationDuration = (tableHeight / containerHeight) * 2; // 根据内容高度和容器高度计算动画持续时间
                        tableItems.forEach((item) => {
                            item.style.animation = `scrollTable ${animationDuration}s infinite linear`; // 设置动画
                            console.log(item.style.animation);

                        });
                    }
                },
                // 点击事件
                clickad() {
                    this.startAnimation()
                },
            },
        });
    </script>
</body>

</html>```


注意事项:

  1. 在使用Vue的 v-for 指令时,要确保每个列表项都有唯一的 key 属性,以便Vue能够正确地跟踪和更新元素。
  2. 如果表格内容高度小于容器高度,则不需要进行滚动动画,可以根据实际情况进行判断和处理

总结:

这段代码通过Vue实现了一个滚动表格动画效果,根据表格内容的高度和容器的高度,判断是否需要进行滚动动画,并通过CSS的 transform 属性和 @keyframes 关键帧动画实现滚动效果。此代码适用于需要展示大量数据的表格,并希望以滚动动画的方式展示内容。在使用时要注意为列表项设置唯一的 key 属性,以确保Vue能够正确地跟踪和更新元素。文章来源地址https://www.toymoban.com/news/detail-694138.html

到了这里,关于JS动态计算自动滚动距离的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [JavaScript游戏开发] 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示)

    第一章 2D二维地图绘制、人物移动、障碍检测 第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示) 第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测 第四章 绘制Q版地图、键盘上下左右地图场景切换 带大家回顾下第一章的内容。 使用JavaScript绘

    2024年02月16日
    浏览(44)
  • js 滚动条自动滚动到最底部

    简介:         功能简介,js 滚动条自动滚动到最底部 效果展示: 核心代码: 代码示例: 代码示例2:

    2024年02月11日
    浏览(33)
  • 【JS】设置滚动属性默认自动滚动到底部(overflow:scroll;)

    设置滚动属性默认自动滚动到底部: 场景:实现对话框,默认展示最新的对话内容 react 实现: 所需用到的css样式

    2024年02月07日
    浏览(41)
  • 一个滚动框高度动态计算解决方案

    需求描述,一个嵌套了很多层div或者其他标签的内容框,而它的外层没有设置高度,或者使用百分比,而本容器需要设置高度来实现滚动,要么写死px高度,但是不能自适应,此时需要一个直系父容器(该容器要动态计算高度)包裹,这里的解决方法是,设计一个高阶方法,

    2024年02月11日
    浏览(35)
  • element-ui——timeline时间线组件+自动滚动+v-infinite-scroll无限滚动+动态加载——技能提升

    最近看到同事在弄日志记录,需要实现的效果是: 最终效果图如下: 解析: 为了实现无限滚动,需要做两块一模一样的内容来回交替显示,也就是上面代码中的id=\\\"timeline1\\\"和id=\\\"timeline2\\\"了

    2024年02月11日
    浏览(43)
  • 前端开发中地图定位与距离计算的应用实践

    前端开发中地图定位与距离计算的应用实践 在前端开发中,地图功能的应用日益广泛,无论是用户位置的定位、目标距离的计算,还是地址的解析与展示,地图都发挥着不可替代的作用。本文将重点介绍前端开发中实现地图定位、距离计算以及地址解析的方法,并以腾讯地图

    2024年04月11日
    浏览(34)
  • javascript设置指定年月日,js动态显示当前时间

    大家好,本文将围绕js中如何动态显示日期时间展开说明,javascript设置指定年月日是一个很多人都想弄明白的事情,想搞清楚js动态显示当前时间需要先了解以下几个事情。 创建showTime()函数,利用JavaScript中的Date对象的属性及方法获取时间,利用Window对象的 setInterval() 方法按

    2024年02月03日
    浏览(118)
  • 免费-华为od-C卷-javascript-动态规划-贪心歌手.js

    动态规划-贪心歌手 还有很多其他题,链接是github, 进去可以查看对应文件夹就行

    2024年04月22日
    浏览(33)
  • 【JavaScript】JS实用案例分享:动态生成分页组件 | 通过按键实现移动控制

    CSDN话题挑战赛第2期 参赛话题:学习笔记 🖥️ NodeJS专栏:Node.js从入门到精通 🖥️ 博主的前端之路( 源创征文一等奖作品 ):前端之行,任重道远(来自大三学长的万字自述) 🖥️ TypeScript知识总结:TypeScript从入门到精通(十万字超详细知识点总结) 🧑‍💼 个人简介

    2023年04月21日
    浏览(66)
  • JavaScript的数学计算库:decimal.js

    An arbitrary-precision Decimal type for JavaScript. 整数和浮点数 简单但功能齐全的 API 复制 JavaScript 和对象的许多方法 Number.prototype Math 还处理十六进制、二进制和八进制值 比 Java 的 BigDecimal JavaScript 版本更快,更小,也许更容易使用 无依赖关系 广泛的平台兼容性:仅使用 JavaScript 1

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包