1.前言

当一段文本需要单行显示,但是又限于容器宽度无法完全展示时,我们需要对其滚动展示,所以就有了这个插件,如图:

2.封装思路

  • 使用js模拟循环滚动的动画,容器宽度固定且超出隐藏,文本元素禁止换行,为其动态设定位移
  • 通过Vue指令开启该效果
  • 对比容器宽度和文本宽度,当文本宽度大于容器宽度是,开启定时器为文本元素动态设定位移,定时器id可以存储到容器标签中
  • 位移的终点位于取决于文本宽度与容器宽度的差值
  • 当指令的值发生变动时,要重新计算容器宽度和文本宽度,重置定时器

3.代码

function autoScroll(el) {
//找到容器装载文本的容器
var content_box = el.querySelector('span')
//计算容器宽度
var wrap_width = el.clientWidth
//console.log('容器宽度 = ', wrap_width)
//console.log('文本宽度 = ', content_box.clientWidth)
//判断内容是否溢出
if (content_box.clientWidth > wrap_width) {
//如果内容移除 //外层容器超出隐藏
el.style.overflow = 'hidden' var now_position = 0 //当前位置 默认0
var direction = 'left' //移动方向 一开始向左移动,到顶后向右移动
var target = wrap_width - content_box.clientWidth //向左移动时,到哪个位置就返回
var rest_time = 40 //动画暂停时间
//使用定时器实时修改位移
var timer = setInterval(() => {
//判断是否处于暂停状态 只有不是暂时状态才进行移动
if (rest_time <= 0) {
//方向判断
if (direction == 'left') {
now_position--
} else {
now_position++
}
//如果左移到底 则调转方向向右
if (now_position < target) {
direction = 'right'
//重置暂停动画的时间
rest_time = 20
}
//如果右移到底 则调转方向向左 并暂停一段时间
if (now_position > 0) {
direction = 'left'
//重置暂停动画的时间
rest_time = 40
}
//更新位置
content_box.style.transform = `translateX(${now_position}px)`
}
//减少暂时状态的时间
if(rest_time > 0){
rest_time--
}
}, 50)
//console.log('定时器id = ', timer)
//将定时器id挂载到容器中
el.scroll_id = timer
} else {
//定时器id
el.scroll_id = null
}
}
//Vue指令注册
Vue.directive('scroll', {
// 当被绑定的内容插入到 DOM 中时……
inserted: function (el, binding) {
//创建容器装载文本
var content_box = document.createElement('span')
content_box.style.display = 'inline-block'
//不允许换行
content_box.style.whiteSpace = 'nowrap'
//将内容填入容器中
content_box.innerHTML = binding.value
//将文本容器添加到元素中
el.appendChild(content_box)
//开启功能
autoScroll(el)
},
update: function (el, binding) {
//找到定时器id
var timer = el.scroll_id
console.log('定时器id = ', timer)
//清除定时器
clearInterval(timer)
//找到容器装载文本的容器
var content_box = el.querySelector('span')
//文本替换
content_box.innerHTML = binding.value
//样式重置
content_box.style.transform = `translateX(0)`
//开启功能
autoScroll(el)
}
})

4.使用方法

  • 当前标签使用v-scroll指令传值
  • 设定固定的容器宽度,当前标签不要设定padding,如果需要,那就在外面再包一层
<div v-scroll="msg" style="width:200px;"></div>

Vue.js 文本交替滚动的更多相关文章

  1. js文本公告滚动展示,图片轮播....

    1.引入文件 <link rel="stylesheet" href="/css/liMarquee.css"> <script src=&q ...

  2. 基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多

    通过多次爬坑,发现了这些监听滚动来加载更多的组件的共同点, 因为这些加载更多的方法是绑定在需要加载更多的内容的元素上的, 所以是进入页面则直接触发一次,当监听到滚动事件之后,继续加载更多, 所以对于无 ...

  3. vue.js国际化vue-i18n插件的使用问题,在模版文本、组件方法、jsf方法里的使用

    vue.js国际化vue-i18n插件的使用问题,在模版文本.组件方法.jsf方法里的使用 1.在文本里使用{{$t("xxx")}} <span>{{$t(" ...

  4. 2018-11-23 手工翻译Vue.js源码:尝试重命名标识符与文本

    续前文: 手工翻译Vue.js源码第一步:14个文件重命名 对core/instance/索引中的变量, 方法进行重命名如下(题图): import { 混入初始化 } from './初始化' im ...

  5. 基于animate.css动画库的全屏滚动小插件,适用于vue.js(移动端、pc)项目

    功能简介 基于animate.css动画库的全屏滚动,适用于vue.js(移动端.pc)项目. 安装 npm install vue-animate-fullpage --save 使用 main.j ...

  6. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

  7. 从零开始学 Web 之 Vue.js(一)Vue.js概述,基本结构,指令,事件修饰符,样式

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  8. 【Vue】转-Vue.js经典开源项目汇总

    版权声明:本文为EnweiTech原创文章,未经博主允许不得转载. https://blog.csdn.net/English0523/article/details/88694219 Vue是什么? ...

  9. vue.js相关UI组件收集

    内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 ###UI组件 element ★9689 - 饿了么出品的Vue2的web UI工具套件 Vux ★6927 - 基于Vu ...

  10. 【前端】Vue.js经典开源项目汇总

    Vue.js经典开源项目汇总 原文链接:http://www.cnblogs.com/huyong/p/6517949.html Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) ...

随机推荐

  1. ServiceMesh 1:大火的云原生微服务网格,究竟好在哪里?

    1 关于云原生 云原生计算基金会(Cloud Native Computing Foundation, CNCF)的官方描述是: 云原生是一类技术的统称,通过云原生技术,我们可以构建出更易于弹性扩展. ...

  2. SQL Server 备份方案

    参考 SQL Server三种常见备份 SQL Server备份策略 以前写的笔记 目的 在发生意外 (人为删除, 磁盘坏掉) 之后, 让数据可还原到指定时间点上. Backup 的种类 备份分 3 ...

  3. java_day1_认识计算机,java环境,Java关键字、标识符、注释

    一.认识计算机 1.组成: 硬件:cpu,内存,显卡,... 软件: 系统软件:WPS, wegame, steam, IDEA,..... 应用软件:WPS, wegame, steam, IDEA ...

  4. JavaScript——基础语法

    书写语法    输出语句    变量    数据类型    运算符        == 与 === 区别:       ==:         1.判断类型是否一样,如果不一样,则进行类型转换     ...

  5. Scala编程语言基本常识

    ​ 本文参考来源: Scala编程语言基本常识 – 萌面人博客 ​ 一 基本常识 Scala被称为大数据的黄金语言,它的发明人是马丁奥德斯基(Martin Odersky) 2001年诞生,融合了Ja ...

  6. Flutter Engage 活动精彩回顾 | 中文字幕视频

    在 Flutter Engage 预告之后,无数开发者充满期待并且在社区中积极讨论交流,分享见解.今天,我们正式发布 Flutter 2.0,并在 Flutter Engage 活动 中详细介绍了这一 ...

  7. nginx缓存加速笔记

    目录 1 服务端缓存原理 1.1 定义一个缓存目录 1.2 启用缓存 1.3 Nginx 作反代 1.4 缓存一时爽,全家火葬场. 1.5 ngx_cache_purge 1 服务端缓存原理 主要是缓 ...

  8. 28. 找出字符串中第一个匹配项的下标 Golang实现

    题目描述: 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始).如果 needle 不是 hay ...

  9. 2022年最新数据库经典面试题及答案汇总(含PostgreSQL、Oracle、MySQL)

    随着企业数字化需求的增加,数据库行业发展日益壮大,企业对DBA岗位的需求也处于逐步增加中.我们梳理了墨天轮平台上2022年最新的一批数据库经典面试题,主要包含PostgreSQL.MySQL和Orac ...

  10. 数组 findIndex 方法去重

    思路:先使用 findIndex 找到重复元素的下标,然后使用 splice 方法删除 :