js实现滚动播报功能

js简单实现滚动播报功能,可根据具体项目进行修改

html 复制代码
   <div id="bobaodiv" style="overflow: hidden; height: 26px; width: 160px; border: 4px solid blue;" onmouseover="BBScrollAmount=0" onmouseout="BBScrollAmount=1">
        <div style="border: 1px solid black; height: 24px; text-align: center;">第一个子DIV</div>
        <div style="border: 1px solid black; height: 24px; text-align: center;">第二个子DIV</div>
        <div style="border: 1px solid black; height: 24px; text-align: center;">第三个子DIV</div>
        <div style="border: 1px solid black; height: 24px; text-align: center;">第四个子DIV</div>
        <div style="border: 1px solid black; height: 24px; text-align: center;">第五个子DIV</div>
        <div style="border: 1px solid black; height: 24px; text-align: center;">第一个子DIV</div>
    </div>
javascript 复制代码
<script type="text/javascript">
        var oMarquee; //播报的容器
        var BBLineH = 26; //单行高度,像素
        var BBScrollAmount = 1; //每次滚动高度,像素
        var BBLineCount =5; //当前这批数据 实际行数 
        var rollRestTime = 2500; //一条新播报滚动完成后,距离下一次滚动的间隔时间 单位ms
        var rollTime = 50; //播报滚动中的刷新时间 单位ms 控制滚动速度
        /*
         * 启动播报滚动事件
         */
        window.onload= function(){
            oMarquee = document.getElementById("bobaodiv"); //滚动对象 
            window.setTimeout( "run()", rollRestTime );
        }
        /*
         * 播报滚动事件主逻辑
         */
        function run() {         
            if(BBScrollAmount == 0){//若单次滚动的距离为0,则开始下一次监听,不计数,用于鼠标悬停暂停播报
                window.setTimeout( "run()", rollTime );
                return;
            }
            if ( oMarquee.scrollTop >= BBLineCount * BBLineH ) {//滚动完一次数据后,复位
                oMarquee.scrollTop = 0;                         //复位后立即滚动,所以补加第一位元素,保证停留时间
            }
            oMarquee.scrollTop += BBScrollAmount;
            if ( oMarquee.scrollTop % BBLineH < 1 && oMarquee.scrollTop > 0 ) { //滚动完成
                window.setTimeout( "run()", rollRestTime );
            } else {
                window.setTimeout( "run()", rollTime );
            }
        }

    </script>

注意:vue中使用在mounted调用一次,在destroyed中清理延时器

相关推荐
NiceCloud喜云7 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
wordbaby8 小时前
React Native + RNOH:跨页面数据回传的最佳实践与避坑指南
前端·react native
GISer_Jing8 小时前
Three.js着色器编译机制深度解析
javascript·webgl·着色器
丷丩8 小时前
MapLibre GL JS第22课:查看本地GeoJSON
前端·javascript·map·mapbox·maplibre gl js
油炸自行车8 小时前
Claude Code 错误:API Error: 400 Failed to deserialize the JSON body into the
开发语言·javascript·json·trae·claude code·api error 400
Front思9 小时前
AI前端工程师需要具备能力+
前端·人工智能·ai
ZC跨境爬虫11 小时前
跟着 MDN 学CSS day_29:(掌握文本与字体样式的核心艺术)
前端·css·ui·html·tensorflow
李子琪。12 小时前
网络空间安全深度实战:CSRF 漏洞原理剖析与基于 Token 的纵深防御体系构建(全栈实验报告)
前端·安全·csrf
冰暮流星12 小时前
javascript之history对象介绍
前端·笔记
IT_陈寒12 小时前
Vite热更新失灵?你可能漏了这个配置
前端·人工智能·后端