前言:

        本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽。

        本篇文章为您分析一下原生JS写文字滚动效果

需求分析:

  • 需要用到animate.js动画插件 【上一篇博客中】 https://www.cnblogs.com/qq4297751/p/12651460.html

  • 如果您没有看过我上一篇的运动插件的博客,那么请您先看完运动插件再来查阅下面这篇文章,本片文章只是对运动插件的一个小应用

HTML结构


    <div class="container">
        <div class="left title">最新公告</div>
        <div class="left item">
            <ul>
                <li>1.Lorem ipsum dolor sit.</li>
                <li>2.Deserunt nobis eum consectetur.</li>
                <li>3.Deleniti ut esse praesentium?</li>
                <li>4.Unde ullam dolore dicta!</li>
                <li>5.Hic dicta atque esse.</li>
            </ul>
        </div>
    </div>

CSS样式

        .container {
            background-color: #b3effe;
            height: 50px;
            padding: 10px 20px;
            box-sizing: border-box;
        }

        .left {
            float: left;
            height: 30px;
            line-height: 30px;
        }

        .title::after {
            content: "|";
            margin-left: 15px;
            font-size: 25px;
            color: #d8d8d8;
            /* vertical-align: -5px; */
        }

        .left ul {
            margin: 0;
            padding: 0;
            list-style: none;
            margin-left: 20px;
            height: 30px;
            overflow: auto;
        }

        .left ul li {
            height: 30px;
        }

看看效果

文字的滚动原理就是隐藏旁边的滚动条
想让他无缝滚动,就需要在最后一条数据中添加第一条数据

// 选中ul
var ul = document.querySelector(".left ul");
// 第一步: 要让他无缝滚动,需要复制第一个li
function cloneFirstLi() {
    // 深度克隆第一个li元素
    var firstLi = ul.children[0].cloneNode(true);
    // 添加到ul之后
    ul.appendChild(firstLi);
}

cloneFirstLi(); // 调用函数

设置一个定时器,开始滚动


/**
 * 第二步: 开始滚动
 */
function startSroll() {
    // 设置定时器
    setInterval(scroll, 2000)
}



/**
 * 第三步: 滚动一次的距离
 */
function scroll() {
    // 调用运动插件
    var animate = new myPlugin.Animate({
        total: 300,               // 总时间
        begin: {
            top: curTop           // 开始滚动条的高度
        },
        end: {
            top: curTop + height  // 结束滚动条的高度 = 当前滚动条的高度加上滚动距离
        },
        onmove: function () {
            curTop = this.curData.top;  // 目标状态的滚动条高度
            ul.scrollTop = curTop;      // 重新设置滚动条的高度
        },
        onover: function () {
            // 如果当前滚动条的高度 - 滚动距离 === 目标状态的滚动条高度
            if (ul.scrollHeight - height === curTop) {
                curTop = 0;             //滚动条回到0
                ul.scrollTop = curTop;  // 重新设置滚动条的高度
            }
        }
    });
    animate.start();  // 调用开始函数
}

startSroll();

效果如下

最后把CSS样式中的overflow: auto换成hidden就行了

结语

整完!!!

js 实现文字滚动功能,可更改配置参数 带完整版解析代码。的更多相关文章

  1. js 实现淘宝放大镜功能,可更改配置参数 带完整版解析代码[magnifier.js]

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写淘宝放大镜效果 基本功能: 运 ...

  2. js 实现淘宝无缝轮播图效果,可更改配置参数 带完整版解析代码[slider.js]

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写淘宝无缝轮播图效果 需求分析: ...

  3. js 实现图片瀑布流效果,可更改配置参数 带完整版解析代码[waterFall.js]

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS实现图片瀑布流效果 页面需求 1 ...

  4. js 实现对象的混合与克隆效果,带完整版解析代码[helpers.js]

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写淘宝无缝轮播图效果 对象混合 ...

  5. js 实现动画功能,完整解析插件版 可更改配置参数[animate.js]

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写一个运动插件 基本功能: 补充 ...

  6. JS无缝文字滚动(兼容各大浏览器)

    <style>*{margin:0px;padding:0px;border:0px;}body{font-size:12px}#demo1{height:auto;text-align: ...

  7. MFC/VC CxImage 简单配置与使用 (完整版)

    如果本篇文章还不能解决你在生成解决方案以及便宜过程中的问题 请参阅: http://blog.csdn.net/afterwards_/article/details/7997385 我个人配置过来成 ...

  8. PHP LAMP环境搭建及网站配置流程(完整版)

    心血来潮想做一个自己的博客网站,写一些文章做技术分享,平时遇到的一些问题的解决办法都记录下来,网站搭建成功,那么第一篇博客自然就是整个网站的搭建以及域名的注册.备案.解析流程,总共分为以下几步: 1. ...

  9. IntelliJ IDEA配置Tomcat(完整版教程)

    查找该问题的童鞋我相信IntelliJ IDEA,Tomcat的下载,JDK等其他的配置都应该完成了,那我直接进入正题了. 1.新建一个项目 2.由于这里我们仅仅为了展示如何成功部署Tomcat,以及 ...

随机推荐

  1. SQL Server 创建链接服务器的脚本,自定义链路服务器的简短名称

    USE [master]GO /****** Object:  LinkedServer [SQL01]    Script Date: 2020/4/9 11:51:17 ******/EXEC m ...

  2. c期末笔记(2)

    1.定义数组 1.1.a[3][2] = [1,2,3,4,5,6],代码是定义一个三行两列的二维数组.在数组声明和初始化时,如果用户定义的元素数量超过用户规定的元素数量,以语法错误报错.(如:cah ...

  3. 微信小程序将外部数据从父组件中传入到子组件

    小程序组件开发遇到一个组件内嵌两个组件,而这两个子组件所使用的数据来自于同一个API,如下图所示. 如果这时候两个子组件各自导入同一个接口就会显得多余.另外的办法是由父组件导入接口数据,再从父组件将接 ...

  4. CVPR 2020论文收藏(转知乎:https://zhuanlan.zhihu.com/p/112337176)

    CVPR 2020 共收录 1470篇文章,根据当前的公布情况,人工智能学社整理了以下约100篇,分享给读者. 代码开源情况:详见每篇注释,当前共15篇开源.(持续更新中,可关注了解). 算法主要领域 ...

  5. MTK Android 源码目录分析

    Android 源码目录分析 Android 4.0 |-- abi (application binary interface:应用二进制接口)|-- art (average retrieval ...

  6. Python高级特性-迭代器和生成器

    迭代器 Python中可迭代对象(iterable)通俗指可直接作用与For循环的数据对象,如Python中的集合数据类型,字符串(str),列表(list),元组(tuple),集合(set),字典 ...

  7. Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 平常我们功能测试用例非常多时 ...

  8. C#多线程系列(1):Thread

    目录 1,获取当前线程信息 2,管理线程状态 2.1 启动与参数传递 2.1.1 ParameterizedThreadStart 2.1.2 使用静态变量或类成员变量 2.1.3 委托与Lambda ...

  9. 24 接口 Interface

    /** Java语言的继承是单一继承,一个子类只能有一个父类(一个儿子只能有一个亲爹)* Java语言给我们提供了一种机制,用于处理继承单一的局限性的,接口* 接口:接口是一个比抽象类还抽象的类,接口 ...

  10. matplotlib 中其他基于Affine2DBase的类

    2020-04-11 11:42:22 --Edit by yangray以下所有类(除了BboxTransformToMaxOnly )都直接继承于Affine2DBaseIdentityTrans ...