前言:

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

        本篇文章为您分析一下原生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. 通过jsDelivr + github 搭建一个简易图床

    应用场景: 在大型项目里需要很多图片时,不会直接把图片存储在项目文件夹里,也不推荐直接用数据库存储,而是用第三方存储,cdn,也可以自己搭个存储图片的服务器,等等方式,如果时自己练练手,做做博客,写写 ...

  2. 玩转控件:封装Dev的SearchLookupEdit

    鸣谢 随着前面几个章节对控件封装与扩展的分享,不少小伙伴儿们在作者公众号上反馈,并联系作者,表示通过这些系列和源码能学到不少细节上的东西,并运用到了自己的实际项目当中,也有不少伙伴儿反馈更好更优的处理 ...

  3. 用命令在本地创建github仓库

    问题 每次创建github仓库,都要到github官网,有点麻烦,想在本地直接创建github仓库,写好项目后直接push. 操作系统:linux 步骤 1, 首先在github申请一个私人api t ...

  4. WeixinJSBridge API使用实例

    <span style="color: rgb(51, 51, 51); font-family: tahoma, arial, 宋体; font-size: 14px; line-h ...

  5. 开启sftp服务日志并限制sftp访问目录

    目录导航 目录导航 开启sftp日志 修改sshd_config 修改syslogs 重启服务查看日志 限制sftp用户操作目录 前提说明 1. home目录做根目录 2. 单独创建目录做根目录 方法 ...

  6. 批处理 bat 查询局域网内在线电脑IP

    查看自己局域网的IP和物理网卡地址可以在 WIN+R –> 打开cmd 键入 arp -a 可以看到局域网中所有的在线IP COLOR 0A CLS @ECHO Off Title 查询局域网内 ...

  7. Qt开发环境搭建 - Windows + VS2010 + VS插件

    Qt 开发环境搭建 - Windows+VS2010+VS插件 1.Qt在Windows平台下的三种开发环境 方案 编辑器 编译器 调试器 一 Qt Creator MinGW GDB 二 Qt Cr ...

  8. MySQL REPLACE INTO 的使用

    前段时间写游戏合服工具时出现过一个问题,源DB和目标DB角色表中主键全部都不相同,从源DB取出玩家数据再使用 replace into 写入目标DB中,结果总有几条数据插入时会导致目标DB中原有的角色 ...

  9. Java相同id的数据集合,合并数据为一条,并将几个字段内容合并为一个

    Java实现,当然也可以数据库实现; /** * Created by shaozhiqi on 2019/7/31. */ public class TestUnion { @Test public ...

  10. 微服务框架-Spring Cloud

    Spring Cloud入门 微服务与微服务架构 微服务架构是一种新型的系统架构.其设计思路是,将单体架构系统拆分为多个可以相互调用.配合的独立运行的小程序.这每个小程序对整体系统所提供的功能就称为微 ...