toast插件的简单封装(样式适用pc后台管理系统的场景)
直接分三个步骤吧:
1、手写一个toast.vue组件
<template>
<transition name="toast-fade">
<div class="toast" :class="toastClass" v-show="isShow" @mouseenter="onMouseenter" @mouseleave="onMouseleave">
<button class="toast-close-button" @click="hide">×</button>
<div class="toast-container">
<div class="toast-title">{{title}}</div>
<div class="toast-content">{{content}}</div>
</div>
</div>
</transition>
</template>
<script>
export default {
data: () => ({
// list: [],
title: null, //toast标题
content: null, //toast内容
type: null, //toast类型
isShow: false, //toast是否显示
timer: null,
onShow: () => {},
onHide: () => {}
}),
computed: {
// 样式'success, error, warning, default'
toastClass() {
return this.type ? 'toast-' + this.type : null
}
},
methods: {
// 显示
show(params) {
let { content, title, onShow, onHide, type } = params
this.type = type
this.content = content
this.title = title
this.onShow = onShow
this.onHide = onHide
this.isShow = true
this.setTimer()
setTimeout(()=>{
this.isShow = false
},3000)//3s后自动关闭
}, // 隐藏
hide() {
this.isShow = false
},
// 计时器
setTimer() {
clearTimeout(this.timer)
this.timer = setTimeout(() => {
this.isShow = false
}, 4000)
},
// 鼠标移至组件时保持显示状态
onMouseenter() {
clearTimeout(this.timer)
},
// 鼠标移开组件时重新定时
onMouseleave() {
if (this.isShow) this.setTimer()
}
},
watch: {
isShow(val) {
if (val && typeof this.onShow === 'function') {
this.onShow()
} else if (!val && typeof this.onHide === 'function') {
this.onHide()
}
}
}
} </script>
<style>
.toast {
position: fixed;
top: 15px;
right: 15px;
display: block;
width: 300px;
overflow: hidden;
box-shadow: 0 0 6px #999;
opacity: .8;
border-radius: 3px 3px;
padding: 15px 15px 15px 15px;
background-position: 15px center;
background-repeat: no-repeat;
color: #333;
background-color: #f0f3f4;
} .toast-success {
color: #fff;
background-color: #1E90FF;
padding: 15px 15px 15px 50px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
} .toast-error {
color: #fff;
background-color: #FF0000;
padding: 15px 15px 15px 50px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
} .toast-warning {
color: #fff;
background-color: #CD853F;
padding: 15px 15px 15px 50px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
} .toast:hover {
opacity: 1;
box-shadow: 0 0 18px #888;
transition: all 200ms ease;
} .toast-container {
vertical-align: middle;
} .toast-fade-enter,
.toast-fade-leave-active {
opacity: 0;
transform: translateX(100%);
} .toast-fade-leave-active,
.toast-fade-enter-active {
transition: all 400ms cubic-bezier(.36, .66, .04, 1);
} .toast-title {
font-size: 14px;
font-weight: bold;
} .toast-close-button {
padding: 2px 2px;
border: none;
background: transparent;
position: relative;
right: -10px;
top: -15px;
float: right;
font-size: 20px;
font-weight: bold;
color: #ffffff;
-webkit-text-shadow: 0 1px 0 #ffffff;
text-shadow: 0 1px 0 #ffffff;
-ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
filter: alpha(opacity=80);
} </style>
2、手写一个toast.js文件
import Toast from '../components/toast'
export default {
install (Vue, options = {}) {
const VueToast = Vue.extend(Toast)
let toast = null
function $toast (params) {
return new Promise(resolve => {
if (!toast) {
toast = new VueToast()
toast.$mount() //手动挂载
document.querySelector(options.container || 'body').appendChild(toast.$el)
}
console.log('plugin done')
toast.show(params)
resolve()
})
}
Vue.prototype.$toast = $toast
}
}
3、mainjs注入 组件内部调用

<template>
<div>
<button @click="Toast1">消息成功</button>
<button @click="Toast2">消息失败</button>
<button @click="Toast3">消息警告</button>
</div>
</template>
<script>
export default {
methods: {
Toast1() {
this.$toast({
title: '消息发送成功',
content: '以下是发送成功的消息提醒',
type: 'success',
onShow: () => {
console.log('on toast show')
},
onHide: () => {
console.log('on toast hide')
}
})
},
Toast2() {
this.$toast({
title: '消息发送失败',
content: '以下消息发送失败的提醒',
type: 'error',
onShow: () => {
console.log('on toast show')
},
onHide: () => {
console.log('on toast hide')
}
})
},
Toast3() {
this.$toast({
title: '消息警告提示',
content: '您将发送警告消息',
type: 'warning',
onShow: () => {
console.log('on toast show')
},
onHide: () => {
console.log('on toast hide')
}
})
}
}
} </script>
以上就可以完成一个简单的toast插件。
toast插件的简单封装(样式适用pc后台管理系统的场景)的更多相关文章
- js简单封装样式
class Foo{ constructor(name) { this.name = name } greet() { console.log('hello this is',this.name) } ...
- .Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统
项目名称:学生信息管理系统1.0 后台框架:.Net Core 3.1 + EF Core yrjw.ORM.Chimp 前端框架:ASP.NET Core MVC + LayUI + Bo ...
- 从零开始实现Vue简单的Toast插件
在前端项目中,有时会需要通知.提示一些信息给用户,尤其是在后台系统中,操作的正确与否,都需要给与用户一些信息. 1. 实例 在Vue组件的methods内,调用如下代码 `this``.$toast( ...
- 简单封装的web里面的tab点击和swipe滑动的小插件
简单封装的一个web的手势,tab和swipe,里面的具体数值都是自定义上去的,没有实际的标准,可以自行去修改都行 前两个是详解,js插件在最后一部分代码 ``` //封装web的tab步骤详解 &l ...
- bootstrap风格的multiselect插件——类似邮箱收件人样式
在开发颗粒云邮箱的过程中,遇到了一个前端的问题,就是邮箱收件人的那个multiselect的input输入框.不仅能够多选,还要能够支持ajax搜索,把联系人搜索出来.就是类似下面的这个东西: 网上找 ...
- FMDB简单封装和使用
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
- Android--Retrofit+RxJava的简单封装(三)
1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...
- jquery简单封装
对Raphael画图标的一个jquery简单封装 公司要做一个项目的demo,要求地图上可以插红旗,所以就用到了Raphael. 因为是个demo,所以地图就用了一张图片,效果如下: 所以为了更好的封 ...
- Android ToolBar 的简单封装
使用过 ToolBar 的朋友肯定对其使用方法不陌生,由于其使用方法非常easy.假设对 ActionBar 使用比較熟练的人来说.ToolBar 就更easy了!只是,相信大家在使用的过程中都遇到过 ...
随机推荐
- HDU 1711(KMP)字符串匹配
链接 HDU 1711 Number Sequence KMP 算法 我以自己理解写的,写的不对,不明白的地方海王子出来,一起共同学习: 字符串匹配 就是KMP,一般思想,用一个for循环找开头 ...
- 输出文章段落首行空格缩进在IE和chrome显示不一致的问题
一般的编辑文章时,首行都缩进两格,而执行的操作则是一个tab键或者四个空格键,在html代码中体现的往往都是4个 然而我在输出时却发现了同样的html代码,在IE上显示的是缩进了一个字符,在chrom ...
- 如何从kernel源码中查出版本号(转载)
转载:http://m.android.tgbus.com/tgmobile/arc/174624.shtml 目前查版本号的方法都是在编译以后从rootfs里看的,难道从源码就看不到,一定要编译以后 ...
- c# 异常找不到源代码的情况
简单说下原因,调用的是dynamic参与的函数 dynamic dataqueue = pi.GetValue(this,null); var eo = ErrorObject.True; var v ...
- 关于国债的一些计算: 理论TF价格1(缴款日前无付息)
计算 ExpectedTFPrice 是一个比较复杂的计算,我们这里讨论简单的一种情况. 给定一只可交割国债bond(一般为CTD),一个国债期货tf,一个日期t(表示tf的一个交易日期,我们通过t日 ...
- bzoj 3613: [Heoi2014]南园满地堆轻絮【二分+贪心】
二分答案w,然后判断的时候维护一个mx,扫描序列,先更新mx=max(mx,a[i]-w),然后如果a[i]+w<mx的话就是说这个位置即使升到极限并且前面降到极限也不能符合条件了 #inclu ...
- IDEA2018.3.5Tomcat output 中文乱码 修改配置文件生效的解决办法
首先,我也是尝试别人介绍的方法: IDEA Windows 环境 console 乱码问题 - intellij idea 15 控制台输出中文乱码问题解决办法 - liuhai的博客 - CSDN博 ...
- Tomcat | 修改默认端口
Tomcat安装目录下 conf 目录下 server.xml 找到 <Connector connectionTimeout="/> 修改其中port值即可
- Educational Codeforces Round 24 D
Alice and Bob got very bored during a long car trip so they decided to play a game. From the window ...
- jmeter(二十二)jmeter测试Java请求
目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Java Request Sampler 一.核心步骤 1.创建一个Java工程: ...