基于 flexible 的 Vue 组件:Toast -- 显示框效果


Posted in Javascript onDecember 26, 2017

基于flexible.js 的 Vue 组件

前言:

  • 目前手头的移动端Vue项目是用手淘的 lib-flexible 作适配的,并用px2rem 来自动转换成rem。关于lib-flexible和px2rem的配置,请移步 vue-cli 配置 flexible 。
  • 由于使用rem作适配,导致现有的很多移动端UI框架不能与之很好的配合,往往需要大动干戈更改UI框架的样式,背离了使用UI框架达到快速开发的初衷。
  • 为了以后项目的组件复用,以及提高开发可复用组件的能力,特把平时项目中 常用的、简单的 组件单独拎出来。
  • 此为小白之作,论代码质量、难易程度、复用度,远不及各位大佬之杰作,求轻喷。同时,也恳请各位,提出意见和建议,不胜感激!
  • GitHub地址:vue-flexible-components

Toast -- 显示框

效果展示

基于 flexible 的 Vue 组件:Toast -- 显示框效果 

代码分析

div包含icon小图标和文字说明,构成简单的dom结构,利用props定义变量值,用computed计算属性对传入的值进行解构,watch监听弹框显示,并结合.sync修饰符达到双向数据绑定,同时用$emit向父组件派发事件,方便父组件监听回调。

dom结构

<transition name="fade">
 <div class="Toast" v-if="toastShow">
 <div
 class="box"
 :style="positionTop"
 >
 <span
 :class="iconClass"
 :style="iconBg"
 v-if="iconIsShow"
 ></span>
 <p
 v-if="message"
 >{{message}}</p>
 </div>
 </div>
</transition>

props数据

props: {
 message: { // 提示内容
 type: String,
 },
 toastShow: { // 是否显示
 type: Boolean,
 default: false
 },
 iconClass: { // 背景图片
 type: String,
 },
 iconImage: { // 自定义背景图片
 },
 duration: { // 定时器
 type: Number,
 default: 1500
 },
 position: { // 弹出框位置
 type: String,
 default: '50%'
 }
},

computed

computed: {
 // 用于判断显示框位置
 positionTop() {
 return {
 top: this.position
 }
 },
 // 自定义父组件传过来的背景图片
 iconBg() {
 if (this.iconImage) {
 return {
 backgroundImage: `url(${this.iconImage})`
 }
 } else {
 return;
 }
 },
 // 用于判断icon是否显示
 iconIsShow() {
 if (this.iconClass == 'success') {
 return true;
 } else if (this.iconClass == 'close') {
 return true;
 } else if (this.iconClass == 'warning') {
 return true;
 } else if (this.iconImage) {
 return true;
 } else {
 return false;
 }
 }
},

watch

watch: {
 toastShow() {
 // 监听toast显示,向父组件派发事件
 if (this.toastShow) {
 if (this.duration < 0) {
 this.$emit('toastClose');
 } else {
 setTimeout(()=>{
  this.$emit('update:toastShow', false) // 利用了.sync达到双向数据绑定
  this.$emit('toastClose');
 }, this.duration)
 }
 }
 }
}

使用说明

组件地址: src/components/Toast.vue (不能npm,只能手动下载使用)

下载并放入自己项目中 —— import 引入组件 —— components中注册组件 —— 使用

props

props 说明 类型 可选值 默认值
toastShow 控制显示框显示、隐藏。需添加.sync修饰符才能自动关闭,详见例子 Boolean false  true false
message 提示信息 String
iconClass icon小图标 String success  warning  close
iconImage 自定义小图标(图片需require引入)
duration 定时器(毫秒),控制弹框显示时间,负数代表不执行定时任务 Number 1500
position 弹框位置(距顶) String '50%'

$emit

$emit 说明 参数
toastClose 弹框关闭回调

示例

// 默认效果,只有提示信息
 <toast
 message = '默认信息'
 :toastShow.sync = 'isShow1' // 需添加.sync修饰符,才能达到自动关闭的效果,否则只能监听toastClose手动关闭
 ></toast>  // 关于sync的说明,请看官网(主要是为了达到双向数据绑定,子组件修改父组件状态)
 
 // 增加自带小图标
 <toast
 message = 'success'
 iconClass = 'success'
 :toastShow.sync = 'isShow2'
 ></toast>
// 自定义类型
 <toast
 message = '自定义'
 position = '70%'
 :duration = '-1' //负数代表不执行定时任务,自己根据需要去关闭
 :iconImage='bg' // 自定义icon小图标,在data中需require引入,看下面
 :toastShow = 'isShow5' // 因为需要手动关闭,所以不需要.sync了
 @toastClose = 'isClose5' // 监听回调,手动关闭,看下面
 ></toast>
 
 data() {
 return {
 this.isShow5 : true,
 bg: require('../assets/logo.png'), // 图片必须用require进来
 }
 },
 isClose5() {
 setTimeout(()=>{
 this.isShow5 = false;
 }, 2000)
 }

总结

以上所述是小编给大家介绍的基于 flexible 的 Vue 组件:Toast -- 显示框,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
filemanage功能中用到的lib.js
Apr 08 Javascript
看了就知道什么是JSON
Dec 09 Javascript
使用jQuery简化Ajax开发 Ajax开发入门
Oct 14 Javascript
JS Excel读取和写入操作(模板操作)实现代码
Apr 11 Javascript
js使用post 方式打开新窗口
Feb 26 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
May 09 Javascript
JavaScript节点及列表操作实例小结
Aug 05 Javascript
Koa2微信公众号开发之消息管理
May 16 Javascript
详解vuex 渐进式教程实例代码
Nov 27 Javascript
bootstrap table列和表头对不齐的解决方法
Jul 19 Javascript
微信小程序多列表渲染数据开关互不影响的实现
Jun 05 Javascript
openLayer4实现动态改变标注图标
Aug 17 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
Dec 26 #Javascript
AngularJS实现的根据数量与单价计算总价功能示例
Dec 26 #Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
Dec 26 #Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
Dec 26 #Javascript
细说webpack源码之compile流程-入口函数run
Dec 26 #Javascript
Vue 进入/离开动画效果
Dec 26 #Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 #Javascript
You might like
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
jquery tools系列 expose 学习
2009/09/06 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
python操作 hbase 数据的方法
2016/12/18 Python
Python多继承原理与用法示例
2018/08/23 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
python如何实现单链表的反转
2020/02/10 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
会计应届生的自荐信
2013/12/13 职场文书
会计专业自我鉴定范文
2013/12/29 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
电影红河谷观后感
2015/06/11 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技