1.项目中遇到NoticeBar效果怎么写
建一个NoticeBar.vue组件
组件代码如下

<template><transition name="fade"><!--主要内容--><div class="noticebar" :style="{backgroundColor:data.backround}"><div style="margin-left:5px"></div><img v-if="data.icon" :style="{height:data.iconSize?data.iconSize:'16px',width:data.iconSize?data.iconSize:'16px'}" :src=data.icon alt=""><div style="margin-right:5px"></div><div ref="back" class="back"><span ref="text" :style="{fontSize:data.size?data.size:'16px',color:data.color?data.color:'#f60'}" class="text">{{ data.text?data.text:'通知内容' }}</span></div></div></transition>
</template>
<script>
export default {props: {options: {type: Object,default() {return {text: '默认'};}}},data() {return {speed: this.options.speed, // 速度(单位px/s)backWidth: '', // 父级宽度backHeight: '', // 父级高度wordLength: '', // 文本长度state: 1,firstAnimationTime: '', // 状态一动画效果secondAnimationTime: '', // 状态二动画效果data: this.options};},methods: {// 获取数据getData() {let style = document.styleSheets[0];let text = this.$refs.text;let back = this.$refs.back;this.backWidth = back.offsetWidth;this.backHeight = back.offsetHeight;text.style.lineHeight = this.backHeight + 'px';this.wordLength = text.offsetWidth;this.ComputationTime(); // 计算时间style.insertRule(`@keyframes firstAnimation {0%   {left:0px;}100%  {left:-${this.wordLength}px;}}`);style.insertRule(`@keyframes secondAnimation {0%   {left:${this.backWidth}px;}100%  {left:-${this.wordLength}px;}}`);setTimeout(res => {this.changeState();}, this.data.delay);},// 用速度计算时间(想要保持速度一样,2种状态时间不同需算出)ComputationTime() {this.firstAnimationTime = this.wordLength / this.speed;this.secondAnimationTime =(this.wordLength + this.backWidth) / this.speed;},// 根据状态切换动画changeState() {let text = this.$refs.text;if (this.state == 1) {text.style.animation = `firstAnimation ${this.firstAnimationTime}s linear`;this.state = 2;} else {text.style.animation = `secondAnimation ${this.secondAnimationTime}s linear infinite`;}},Listener() {let text = this.$refs.text;console.log(text);text.addEventListener('animationend',res => {this.changeState();},false);}},mounted() {this.Listener();setTimeout(res => {this.getData();}, 100);}
};
</script>
<style lang="less" scoped>
.noticebar {display: flex;align-items: center;height: 100%;width: 100%;background-color: #fff7cc;.icon {img {height: 100%;width: 100%;}}.back {overflow: hidden;white-space: nowrap;margin: 0 auto;height: 100%;width: 100%;position: relative;.text {position: absolute;display: inline-block;padding: 2px 0;}}
}
</style>

调用的时候如下

<template><transition name="fade"><div class="wrap"><div class="father"><noticebar :options=options></noticebar></div></div></transition>
</template>
<script>
import noticebar from './noticebar';
export default {components: {noticebar},data() {return {// noticebar 组件的配置项options: {text:'关于新年假期的调整希望大家可以理解关于新年假期的调整希望大家可以理解关于新年假期的调整希望大家可以理解关于新年假期的调整希望大家可以理解关于新年假期的调整希望大家可以理解关于新年假期的调整希望大家可以理解', // 通知内容icon:'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=735421754,4062673022&fm=26&gp=0.jpg', // 左侧图标(不需要icon不传)iconSize: '16px', // icon大小(正方形默认16px)size: '16px', // 通知内容文字大小(默认16px)color: '#1989fa', // 通知内容文字颜色(默认#f60)backround: '#fff7cc', //背景颜色(默认#fff7cc)delay: '1000', // 动画延迟时间(默认一秒后开始滚动,单位毫秒)speed: '50' // 滚动速率默认50 (px/s)}};}
};
</script>
<style lang="less" scoped>
.wrap {.father {margin: 150px auto;height: 60px;width: 100%;img {height: 100%;width: 20px;}}
}
</style>

NoticeBar 通知栏组件,封装好的可直接使用相关推荐

  1. 实现NoticeBar 通知栏。走马灯公告栏

    前言 微信小程序封装公共组件--实现NoticeBar 通知栏.走马灯公告栏 一.使用步骤 1.引入库 代码如下(示例): "usingComponents": {"va ...

  2. Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  3. ReactNative之从HelloWorld中看环境搭建、组件封装、Props及State

    开篇呢,先给大家问个好,今天是中秋节,祝大家中秋节快乐!!虽然是中秋节,但是木有回家还是总结一下知识点写写博客吧,想着昨天总结一下的,但是昨天和几个同学小聚了一下,酒逢知己总是千杯少呢,喝的微醺不适合 ...

  4. 【uniapp】组件封装与引用

    前言 Hbuilder X 2.7.14.20200618 假设需求 在 [uni-app]自定义导航栏/标题栏 中提到,可以全局取消原生导航栏.全局取消原生导航栏后,就需要为每个页面均添加一个自定义 ...

  5. React学习:ref调用、组件封装调用-学习笔记

    文章目录 React学习:ref调用.组件封装调用-学习笔记 ref调用-string形式 ref调用-回调形式(官方推荐) ref调用-父调子 组件封装调用demo(全选) demo1(单组件) d ...

  6. Vue学习小案例--分页组件封装

    文章目录 Vue学习小案例--分页组件封装 修改成Vue(使用组件) Vue学习小案例–分页组件封装 index.html <!DOCTYPE html> <html lang=&q ...

  7. RabbitMQ 拓展基础组件封装思路

    RabbitMQ 拓展基础组件封装思路 一线大厂的MQ组件实现思路和架构设计思路

  8. php 小程序自定义图,微信小程序之如何使用自定义组件封装原生 image 组件

    零.问题的由来 一般在前端展示图片时都会碰到这两个常见的需求: 图片未加载完成时先展示占位图,等到图片加载完毕后再展示实际的图片. 假如图片链接有问题(比如 404),依然展示占位图.甚至你还可以增加 ...

  9. Vue自定义组件封装及使用Excel

    Vue自定义组件封装及使用Excel 一.js-xlsx 组件安装 二. 创建vue组件 三.使用 四.效果图 一.js-xlsx 组件安装 npm install xlsx --savenpm in ...

最新文章

  1. Map Reduce Shuffle
  2. php mysql 读取中文数据的函数_php读取mysql中文数据出现乱码的解决方法
  3. html jsf ajax blur,JSF和AJAX:隐藏网站的一部分,直到第一个Ajax请求
  4. manacher 背诵用模板
  5. 菜鸟python_手把手教你,菜鸟也能用Python写一个2048游戏
  6. UI(2)---移动端APP应该如何定义页面规范
  7. websocket创建失败_ie11 websocket连接建立时报SecurityError问题
  8. CSS基础——盒子模型【学习笔记】
  9. java中的引用,你注意到没?
  10. 破解电信光猫华为HG8120C
  11. 串口通信pyserial
  12. 最新Java后端面经合集 | 阿里腾讯百度字节
  13. UE4Possess切换控制Pawn
  14. 金融python入门书籍推荐_零基础想系统地学习金融学、量化投资、数据分析、python,需要哪些课程、书籍?有哪些证书可以考?...
  15. 为什么计算机无法读取u盘,U盘无法被电脑识别怎么办?
  16. pytorch系列8 --self.modules() 和 self.children()的区别
  17. Vue—使用canvas实现电子签名
  18. DASAN(V5824G)大山 OLT HGU (4GE+2VOIP)配置指导
  19. 串口通信数据位长度对传输数据的影响
  20. Python 自动化发送钉钉消息

热门文章

  1. Data truncation: Data too long for column ‘xxx‘ at row xxx问题详解
  2. Service(服务)之 Local Service(本地服务)
  3. html中href传递参数,a href带参数传递
  4. JAVA - Stream - stream has already been operated upon or closed
  5. Vagrant + VMBox 踩坑记录
  6. 2021-02-11-JavaWeb网站接入支付宝支付
  7. 千寻位置平台使用入门总结
  8. Pyton 类和对象
  9. USB(九)2022-03-01
  10. html语言闪烁特效代码,css3 实现文字闪烁效果的三种方式示例代码