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了!只是,相信大家在使用的过程中都遇到过 ...
随机推荐
- Java经典算法大全
1.河内之塔.. 2.Algorithm Gossip: 费式数列. 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官(一) 6. ...
- skynet实践(8)-接入websocket
我从开源项目(https://github.com/lipp/lua-websockets,这里我们简称LWS)中抽出了websocket的部分处理,步骤如下: 1)首先是解决LWS的几个依赖问题.L ...
- [SoapUI] Jenkins 配置
cd %WORKSPACE% cmd /c call "%SOAPUI_PRO_HOME%\bin\testrunner.bat" -a -j -PprojectPath=&quo ...
- 【转】git修改文件后,提交到远程仓库
原文地址:https://blog.csdn.net/nly19900820/article/details/73613654 修改文件后,怎么提交到远程仓库1.git status 查看git是否有 ...
- 看鸟哥的Linux私房菜的一些命令自我总结(二)
-关于执行文件路径的变量 $PATH -查看文件与目录 ls -a :全部的文件,连同隐藏文件一起列出来 -d :仅列出目录本身,而不是列出目录内的文件数据 -i :列出inode号码 - ...
- bzoj 3365: [Usaco2004 Feb]Distance Statistics 路程统计【容斥原理+点分治】
统计在一个root下的两个子树,每个子树都和前面的运算一下再加进去对于这种需要排序的运算很麻烦,所以考虑先不去同子树内点对的算出合法点对个数,然后减去每一棵子树内的合法点对(它们实际上是不合法的,相当 ...
- bzoj 5210: 最大连通子块和【动态dp+树剖+线段树+堆】
参考:https://www.cnblogs.com/CQzhangyu/p/8632904.html 要开longlong的 首先看dp,设f[u]为必选u点的子树内最大联通块,p[u]为不一定选u ...
- ufunc函数
无灯可看.雨水从教正月半.探茧推盘.探得千秋字字看. 铜驼故老.说著宣和似天宝.五百年前.曾向杭州看上元. ufunc是universal function的缩写,他是一种对数组的每个元素进行运算的函 ...
- SQL - 单引号和双引号的区别
原文转载至:SQL中的单引号和双引号有区别吗? 在标准 SQL 中,字符串使用的是单引号. 如果字符串本身也包括单引号,则使用两个单引号(注意,不是双引号,字符串中的双引号不需要另外转义). 但在其它 ...
- Qt容器类之三:通用算法
在<QtAlgorithm>头文件中,Qt提供了一些全局的模板函数,这些函数是可以使用在容器上的十分常用的算法.我们可以在任何提供了STL风格迭代器的容器类上用这些算法,包括QList.Q ...