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) ...
随机推荐
- t-io 学习笔记(一)
基础介绍理解篇 序:本文也是在t-io官网学习的基础上写的理解学习笔记:1.什么是t-io? t-io是基于JVM的网络编程框架,和netty属同类,所以netty能做的t-io都能做,考虑到 ...
- Python—键盘输入input()语句
用法: 简化写法:
- BOOST <boost/asio.hpp> 奇怪的编译错误 boost/asio/detail/consuming_buffers.hpp:105:65: error
在我的项目工程代码内#include <boost/asio.hpp>后导致了编译报错: ./include/boost/asio/detail/consuming_buffers.hpp ...
- @RestController和@Controller的区别
@RestController 和 @Controller 是Spring框架中用于定义控制器(Controller)的两个非常重要的注解,它们都用于处理HTTP请求,但它们之间存在一些关键的区别. ...
- template fastread
昨天梦到一种快读,你给他传多少参,他就读多少数 今天学了折叠表达式和隐式转换,现在来把这玩意实现一下 特化函数 void read(int) 读入一个整数 void read(char&[], ...
- 【赵渝强老师】使用MongoDB的命令行工具:mongoshell
一.启动mongo shell 安装好MongoDB后,直接在命令行终端执行下面的命令: mongo 如下图所示: 可选参数如下: 也可以简写为: 在mongo shell中使用外部编辑器,如:vi, ...
- 2023年2月中国数据库排行榜:OTO新格局持续三月,人大金仓、AnalyticDB排名创新高
玉兔迎春至,榜单焕新颜. 2023年2月,兔年开年的 墨天轮中国数据库流行度排行 火热出炉,本月共有259个数据库参与排名,排行榜样式去掉了较上月和半年前得分差的数据显示,更加聚焦各产品之间的排名变化 ...
- KubeSphere 社区双周报 | OpenFunction v1.0.0 发布 | 2023.03.03-03.16
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 高性能 Nginx HTTPS 调优 - 如何为 HTTPS 提速 30%
为什么要优化 Ngin HTTPS 延迟 Nginx 常作为最常见的服务器,常被用作负载均衡 (Load Balancer).反向代理 (Reverse Proxy),以及网关 (Gateway) 等 ...
- Machine Learning Week_7 Support Vector Machines
目录 1 Large Margin Classification 1.1 Optimization Objective 1.1 Logistic Regresson 1.2 Cost 1.3 Supp ...