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

2.封装思路
- 使用js模拟循环滚动的动画,容器宽度固定且超出隐藏,文本元素禁止换行,为其动态设定位移
- 通过Vue指令开启该效果
- 对比容器宽度和文本宽度,当文本宽度大于容器宽度是,开启定时器为文本元素动态设定位移,定时器id可以存储到容器标签中
- 位移的终点位于取决于文本宽度与容器宽度的差值
- 当指令的值发生变动时,要重新计算容器宽度和文本宽度,重置定时器
3.代码
- 项目地址:v-scroll-demo
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 文本交替滚动的更多相关文章
- js文本公告滚动展示,图片轮播....
1.引入文件 <link rel="stylesheet" href="/css/liMarquee.css"> <script src=&q ...
- 基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多
通过多次爬坑,发现了这些监听滚动来加载更多的组件的共同点, 因为这些加载更多的方法是绑定在需要加载更多的内容的元素上的, 所以是进入页面则直接触发一次,当监听到滚动事件之后,继续加载更多, 所以对于无 ...
- vue.js国际化vue-i18n插件的使用问题,在模版文本、组件方法、jsf方法里的使用
vue.js国际化vue-i18n插件的使用问题,在模版文本.组件方法.jsf方法里的使用 1.在文本里使用{{$t("xxx")}} <span>{{$t(" ...
- 2018-11-23 手工翻译Vue.js源码:尝试重命名标识符与文本
续前文: 手工翻译Vue.js源码第一步:14个文件重命名 对core/instance/索引中的变量, 方法进行重命名如下(题图): import { 混入初始化 } from './初始化' im ...
- 基于animate.css动画库的全屏滚动小插件,适用于vue.js(移动端、pc)项目
功能简介 基于animate.css动画库的全屏滚动,适用于vue.js(移动端.pc)项目. 安装 npm install vue-animate-fullpage --save 使用 main.j ...
- 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 的目的是 ...
- 从零开始学 Web 之 Vue.js(一)Vue.js概述,基本结构,指令,事件修饰符,样式
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 【Vue】转-Vue.js经典开源项目汇总
版权声明:本文为EnweiTech原创文章,未经博主允许不得转载. https://blog.csdn.net/English0523/article/details/88694219 Vue是什么? ...
- vue.js相关UI组件收集
内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 ###UI组件 element ★9689 - 饿了么出品的Vue2的web UI工具套件 Vux ★6927 - 基于Vu ...
- 【前端】Vue.js经典开源项目汇总
Vue.js经典开源项目汇总 原文链接:http://www.cnblogs.com/huyong/p/6517949.html Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) ...
随机推荐
- JavaScript – 用 Generator 运行异步函数 & await async
前言 上一篇 JavaScript – Promise 介绍了如何用 JS 编写可读性高的异步函数. 但其实呢, Promise 还不是最好的. 在 es6 之前, Promise 比起回调地狱是好了 ...
- SQL Server – Trigger 触发器
参考: SQLServer触发器详解(概述.工作原理.应用) CREATE TRIGGER (Transact-SQL) SQL Server Triggers and Transactions 以前 ...
- 课时04:了解HTTP网络协议
什么是HTTP协议 HTTP(HyperText Transfer Protocol)叫超文本传输协议,它是web服务器和客户端直接进行数据传输的规则,是一个无状态的应用层协议. HTTP协议工作原理 ...
- foobar2000 v1.6.11 汉化版(更新于 2022.08.25)
foobar2000 v1.6.11 汉化版 -----------------------[软件截图]---------------------- -----------------------[软 ...
- 什么是WebRTC
背景:webrtc web real-time communication 实时通信标准,提供了音视频通话系统的能力. 应用场景: 点对点视频聊天,如 微信视频,等实时视频通话应用. 多人视频会议,企 ...
- 08 ELMo模型(双向LSTM模型解决词向量多义问题)
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- 3.flask 源码解析:路由
目录 一.flask 源码解析:路由 1.1 构建路由规则 1.2 werkzeug 路由逻辑 1.3 flask 路由实现 1.4 match 实现 Flask 源码分析完整教程目录:https:/ ...
- docker常用命令与应用
docker入门与docker file介绍 原文地址 docker常用命令 https://blog.csdn.net/leilei1366615/article/details/106267225 ...
- linux 基础(1)快速查询指令的用法
--help 几乎所有的指令,都可以使用--help选项进行查询.给命令使用--help选项,就会直接出现一段说明命令的文字. > date --help 用法:date [选项]... [+格 ...
- 『玩转Streamlit』--页面布局
一个优秀的数据应用不仅仅是功能的强大,更在于其用户体验的打造. 而良好的页面布局,作为用户体验的重要组成部分,不仅能够提升信息的可读性,还能引导用户高效地完成操作. 反之,混乱的布局会让人感到困惑和挫 ...