基于 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 相关文章推荐
HTML中事件触发列表与解说
Jul 09 Javascript
那些年,我还在学习jquery 学习笔记
Mar 05 Javascript
3款实用的在线JS代码工具(国外)
Mar 15 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
Aug 24 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
May 05 Javascript
javascript日期比较方法实例分析
Jun 17 Javascript
使用gulp搭建本地服务器并实现模拟ajax
Apr 05 Javascript
浅谈js闭包理解
Mar 28 Javascript
vue 实现滚动到底部翻页效果(pc端)
Jul 31 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
Nov 13 Javascript
bootstrap实现tab选项卡切换
Aug 09 Javascript
一文彻底理解js原生语法prototype,__proto__和constructor
Oct 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
使用apache模块rewrite_module (转)
2007/02/14 PHP
PHP数组相关函数汇总
2015/03/24 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
PHP getName()函数讲解
2019/02/03 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
javascript this详细介绍
2016/09/19 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
Python基础入门之seed()方法的使用
2015/05/15 Python
python datetime中strptime用法详解
2019/08/29 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
python如何输出反斜杠
2020/06/18 Python
学习Python需要哪些工具
2020/09/04 Python
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
财务方面个人工作的自我评价
2013/12/28 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
计算机专业毕业生自我鉴定
2014/01/16 职场文书
债务授权委托书范本
2014/10/17 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书