前言:

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

        本篇文章为您分析一下原生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. Oracle创建函数例子

    编写一个函数计算学生某一门课程在班级内的排名. 表结构如下: create or replace function fun_score_rank( p_in_stuid in number,--学号 ...

  2. MySql 存储过程分页。

    use address;drop procedure if exists `proc_s_area_code`;delimiter // #告诉mysql解释器,该段命令是否已经结束了,mysql是否 ...

  3. django_rest_framework视图传递参数给序列化器

    django_rest_framework视图传递参数给序列化器 视图中默认可以将request.data传递给序列化器,但request.data是不可更改的对象,但又想将额外的参数传递给序列化器 ...

  4. Linux服务器架设篇,Nginx服务器的架设

    1.安装 nginx依赖包 (1)安装pcre yum install pcre-devel (2)安装openssl yum -y install openssl-devel (3)安装zlib y ...

  5. String 对象-->lastIndexOf() 方法

    1.定义和用法 lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,如果指定第二个参数 start,则在一个字符串中的指定位置从后向前搜索. 语法: string.lastInde ...

  6. 实战|使用Spark Streaming写入Hudi

    欢迎关注微信公众号:ApacheHudi,解锁下一代数据湖技术 1. 项目背景 传统数仓的组织架构是针对离线数据的OLAP(联机事务分析)需求设计的,常用的导入数据方式为采用sqoop或spark定时 ...

  7. Redis之ziplist源码分析

    一.ziplist简介 从上一篇分析我们知道quicklist的底层存储使用了ziplist(压缩列表),由于压缩列表本身也有不少内容,所以重新开了一篇,在正式源码之前,还是先看下ziplist的特点 ...

  8. Three.js如何选中外部模型

    1.问题 three.js中模型选中使用的是射线法,根据摄像机角度,鼠标点击位置和模型选中的distance参数判断来选中模型.对于原生的矢量模型完全没有问题,但是当遇到导入的外部模型,如obj.st ...

  9. 恶劣的网络环境下,Netty是如何处理写事件的?

    更多技术分享可关注我 前言 前面,在Netty在接收完新连接后,默认为何要为其注册读事件,其处理I/O事件的优先级是什么?这篇文章,分析到了Netty处理I/O事件的优先级——读事件优先,写事件仅仅是 ...

  10. Map使用foreach遍历方式,Map获取第一个键值

    List<Map<String, Object>> mapList = new ArrayList<>();  for (Map.Entry<String,O ...