当前位置: 首页 > news >正文

实现文字超过显示宽度每间隔1s自动向左滚动显示(原生JS和vue两种实现方式)

原生JS:

html:

<div id="wrapper" class="wrapper"><div class="inner"><p>文字如果超出了宽度自动向左滚动文字如果超出了宽度自动向左滚动。我是一个粉刷匠,粉刷本领强,我要把那新房子刷的更漂亮</p>    </div>
</div>

js:

 var wrapper = document.getElementById('wrapper');var inner = wrapper.getElementsByTagName('div')[0];var p = document.getElementsByTagName('p')[0];var p_w = p.offsetWidth;var wrapper_w = wrapper.offsetWidth;window.onload=function fun(){if(wrapper_w > p_w){ return false;}inner.innerHTML+=inner.innerHTML;setTimeout("fun1()",2000);}function fun1(){if(p_w > wrapper.scrollLeft){wrapper.scrollLeft++;setTimeout("fun1()",30);}else{setTimeout("fun2()",2000);}}function fun2(){wrapper.scrollLeft=0;fun1();}

css:

*{margin:0;padding:0;}body{font:12px/1 '微软雅黑';}.wrapper{font-size:0.85rem;color:#333;padding-top:0.75rem;margin:0 0.75rem;white-space:nowrap;overflow:hidden;width:300px;}.inner{width:1000px;overflow:hidden;}.inner p{display:inline-block;}

vue

封装组件:

<template><div class="scrollText" ref="outer"><div class="st-inner" :class="{'st-scrolling': needToScroll}"><span class="st-section" ref="inner">{{text}}</span><span class="st-section" v-if="needToScroll">{{text}}</span><!-- 加两条是为了滚动的时候实现无缝衔接 --></div></div>
</template>
<script>
export default {data() {return {needToScroll: false,text: ""};},mounted() {this.startCheck();},beforeDestroy() {this.stopCheck();},methods: {// 检查当前元素是否需要滚动check() {this.setText();this.$nextTick(() => {let flag = this.isOverflow();this.needToScroll = flag;});},// 判断子元素宽度是否大于父元素宽度,超出则需要滚动,否则不滚动isOverflow() {let outer = this.$refs.outer;let inner = this.$refs.inner;let outerWidth = this.getWidth(outer);let innerWidth = this.getWidth(inner);return innerWidth > outerWidth;},// 获取元素宽度getWidth(el) {let { width } = el.getBoundingClientRect();return width;},// 获取到父组件传过来的内容复传给this.textsetText() {this.text =(this.$slots.default &&this.$slots.default.reduce((res, it) => res + it.text, "")) ||"";},// 增加定时器,隔一秒check一次startCheck() {this._checkTimer = setInterval(this.check, 1000);this.check();},// 关闭定时器stopCheck() {clearInterval(this._checkTimer);}}
};
</script>
<style lang="scss" scoped>
.scrollText {overflow: hidden;white-space: nowrap;
}
.st-inner {display: inline-block;
}
.st-scrolling .st-section {padding: 0 5px;
}// 向左匀速滚动动画
.st-scrolling {animation: scroll 10s linear infinite;
}@keyframes scroll {0% {transform: translate3d(0%, 0, 0);}100% {transform: translate3d(-50%, 0, 0);}
}
</style>

使用:

<template><div class="about"><div class="content"><scrollText>一二三四五六七八九十哈哈哈哈哈哈哈哈测试</scrollText></div></div>
</template>
<script>
import scrollText from "@/components/scrollText";
export default {components: { scrollText },data() {return {};}
};
</script>
<style lang="scss" scoped>
.content {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;// 设置容器最大宽度为200width: 200px; font-size: 40px;border: 1px solid lightblue;margin: 40px;
}
</style>

相关文章:

  • SLF4J: Class path contains multiple SLF4J bindings.解决
  • SpringBoot整合Mybatis遇到的常见问题及解决方案
  • 【Midjourney】Midjourney根据prompt提示词生成人物图片
  • 【Linux】修复 Linux 错误 - 文件过大
  • java freemarker 动态生成excel文件
  • 【leetcode150】逆波兰表达式求值Java代码讲解
  • vue大屏-列表自动滚动vue-seamless-scroll
  • mysql二进制对应ef中实体表字段类型
  • git 学习 之一个规范的 commit 如何写
  • 构建创新学习体验:企业培训系统技术深度解析
  • 【Java EE初阶四】锁及synchronized关键字
  • Java正则表达式
  • 「Verilog学习笔记」超前进位加法器
  • CUDA驱动深度学习发展 - 技术全解与实战
  • 五分钟学会SQL:基础入门
  • [NodeJS] 关于Buffer
  • 【Amaple教程】5. 插件
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • iOS编译提示和导航提示
  • JavaScript-Array类型
  • Java程序员幽默爆笑锦集
  • js ES6 求数组的交集,并集,还有差集
  • mysql 数据库四种事务隔离级别
  • React 快速上手 - 07 前端路由 react-router
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Vue--数据传输
  • 和 || 运算
  • 那些年我们用过的显示性能指标
  • 前嗅ForeSpider教程:创建模板
  • 如何设计一个比特币钱包服务
  • 阿里云服务器如何修改远程端口?
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​secrets --- 生成管理密码的安全随机数​
  • ​比特币大跌的 2 个原因
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (七)理解angular中的module和injector,即依赖注入
  • (三)elasticsearch 源码之启动流程分析
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)Controller接口控制器详解(三)
  • (转)VC++中ondraw在什么时候调用的
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .NET Project Open Day(2011.11.13)
  • .net 调用php,php 调用.net com组件 --
  • .net 验证控件和javaScript的冲突问题
  • .net 中viewstate的原理和使用
  • .net流程开发平台的一些难点(1)
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @AutoConfigurationPackage的使用
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [BUUCTF 2018]Online Tool