基于 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 相关文章推荐
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
Oct 23 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
Aug 20 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
Jan 28 Javascript
javascript中cookie对象用法实例分析
Jan 30 Javascript
基于jquery实现三级下拉菜单
May 10 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
Jan 17 Javascript
javascript html5轻松实现拖动功能
Mar 01 Javascript
element-ui 表格实现单元格可编辑的示例
Feb 26 Javascript
vue删除html内容的标签样式实例
Sep 13 Javascript
详解angular2.x创建项目入门指令
Oct 11 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
Jan 15 Javascript
javascript中call,apply,callee,caller用法实例分析
Jul 24 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
JavaScript中的对象化编程
2008/01/16 Javascript
JavaScript 加号(+)运算符号
2009/12/06 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
2016/12/19 Javascript
详解VUE 数组更新
2017/12/16 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
详解Python import方法引入模块的实例
2017/08/02 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Python中property函数用法实例分析
2018/06/04 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
20行python代码实现人脸识别
2019/05/05 Python
详解Python字符串切片
2019/05/20 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
css3发光搜索表单分享
2014/04/11 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
仓库保管员岗位职责
2013/12/20 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
小学生常见病防治方案
2014/06/06 职场文书
中学教师教学工作总结
2015/08/13 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python