基于 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 相关文章推荐
网页常用特效代码整理
Jun 23 Javascript
json格式化/压缩工具 Chrome插件扩展版
May 25 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
Apr 24 Javascript
javascript闭包的高级使用方法实例
Jul 04 Javascript
js克隆对象、数组的常用方法介绍
Sep 26 Javascript
JS实现程序暂停与继续功能代码解读
Oct 10 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
Sep 25 Javascript
SWFObject基本用法实例分析
Jul 20 Javascript
jquery实现倒计时效果
Dec 14 Javascript
性能优化之代码优化页面加载速度
Mar 01 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
Aug 07 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
Sep 26 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
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
分享20款好玩的jQuery游戏
2011/04/17 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
numpy基础教程之np.linalg
2019/02/12 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
校园安全广播稿
2014/02/08 职场文书
家属答谢词
2015/01/05 职场文书
大学校园招聘会感想
2015/08/10 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
业余无线电通联Q语
2022/02/18 无线电
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript