自己动手写Vue插件Toast

自己动手写Vue插件Toast

大家好,又见面了,我是全栈君。

自己动手写Vue插件Toast

		<style>
			.vue-toast {
				width: 100%;
				height: 100%;
				position: fixed;
				top: 0px;
				left: 0px;
				background: rgba(0, 0, 0, 0.3);
			}
			
			.vue-tip {
				position: fixed;
				left: 50%;
				width: 100px;
				line-height: 40px;
				padding: 0 10px;
				margin-left: -60px;
				text-align: center;
				z-index: 9999;
				font-size: 14px;
				color: #fff;
				border-radius: 5px;
				background-color: rgba(0, 0, 0, .7);
				 
			}
			
			.vue-tip.tip-center {
				top: 50%;
			}
			
			.vue-tip.tip-bottom {
				bottom: 50px;
			}
			
			.vue-tip.tip-top {
				top: 50px;
			}
			
			.fadeIn {
				animation-name: fadeIn;
				-webkit-animation-name: fadeIn;
				animation-duration: .5s;
				-webkit-animation-duration: .5s;
				animation-timing-function: ease-in-out;
				-webkit-animation-timing-function: ease-in-out;
				visibility: visible !important;
			}
			
			@keyframes fadeIn {
				0% {
					transform: scale(0);
					opacity: 0.0;
				}
				60% {
					transform: scale(1.1);
				}
				80% {
					transform: scale(0.9);
					opacity: 1;
				}
				100% {
					transform: scale(1);
					opacity: 1;
				}
			}
			
			@-webkit-keyframes fadeIn {
				0% {
					-webkit-transform: scale(0);
					opacity: 0.0;
				}
				60% {
					-webkit-transform: scale(1.1);
				}
				80% {
					-webkit-transform: scale(0.9);
					opacity: 1;
				}
				100% {
					-webkit-transform: scale(1);
					opacity: 1;
				}
			}
		</style>

  

var Toast = {};
//避免重复install,设立flag
Toast.installed = false;
Toast.install = function(Vue, options) {
	if(Toast.installed) return;
	let opt = {
		// 默认显示位置
		defaultType: "center",
		// 默认持续时间
		duration: "3000"
	}
	// 使用options的配置
	for(let i in options) {
		opt[i] = options[i]
	}
	Vue.prototype.$toast = (toast, type) => {
		// 如果有传type,位置则设为该type
		var chooseType = type ? type : opt.defaultType;
		// 如果页面有toast则不继续执行
		if(document.querySelector('.vue-toast')) return;
		// 1、创建构造器,定义好提示信息的模板
		let toastTip = Vue.extend({
			template: `
						           <div class="vue-toast">
						              <div class="vue-tip tip-${chooseType} fadeIn">${toast}</div>
						           </div>
						          `
		});
		// 2、创建实例,挂载到文档以后的地方
		console.log(new toastTip().$mount())
		let tpl = new toastTip().$mount().$el;
		// 3、把创建的实例添加到body中
		document.body.appendChild(tpl);
		// 4.三秒后移除
		setTimeout(() => {
			document.body.removeChild(tpl);
		}, opt.duration);
		//阻止遮罩滑动
		document.querySelector("div.vue-toast").addEventListener("touchmove", function(e) {
			e.stopPropagation();
			e.preventDefault();
		});

		Toast.installed = true;

	};
	// 显示不同的位置
	['bottom', 'top', 'center'].forEach(type => {
		Vue.prototype.$toast[type] = (tips) => {
			return Vue.prototype.$toast(tips, type)
		}
	})
};
// 自动安装  ,有了ES6就不要写AMD,CMD了

if(typeof window !== 'undefined' && window.Vue) {
	window.Vue.use(Toast)
};

export default Toast;

 

 

<template>
  <div id="me">
  	<h1>{
    
    {getMy&&getMy.name}}--{
    
    {getMy&&getMy.age}}</h1>
	  <h1>我是Vue {
    
    {this.$store.state.my.name}}--{
    
    {this.$store.state.my.age}}</h1>
	  <div class="btn">
	  	<button @click='setName'>设置姓名</button>
	    <button @click='setAge'>设置年龄</button>
	    <button @click='setAction'>异步Action</button>
	    <button @click='alertToast'>Toast</button>
	  </div>
  </div> 
</template>

<script>
	import Vue from 'vue'
	import { mapGetters,mapMutations,mapActions  } from 'vuex'
	import Toast from '../js/Toast'
	Vue.use(Toast,{    //支持全局配置
		defaultType: "top",
		duration: "10000"
	})
	export default {
		name: 'Me',
		methods: {
			 ...mapMutations([
	      'setMe' // 映射 this.setMe() 为 this.$store.commit('setMe')
	    ]),
	     ...mapActions([
	      'getTopic' // 映射 this.getTopic() 为 this.$store.dispatch('getTopic')
	    ]),
			setName(){
				this.setMe({
					type:'name',
					num:'王麻子'
				})
			},
			setAge(){
				this.$store.commit('setMe',{
					type:'age',
					num:'100'
				})
			},
			setAction(){
				this.getTopic();
			},
			alertToast(){
				console.log(this);
				console.log(this.$toast("我是一个Toast"));
				//console.log(this.$toast.bottom("我是一个Toast"));
			}
		},
		computed: {
	    ...mapGetters([
	       'getApiVal','getApiValComm','getMy'
    ])
  }
	}
</script>

<style scoped>
	#me {
 	width: 80%;
 	height: 1000px;
 	margin: 0 auto;
 	border: 1px solid red;
 	background: white;
 }
 
 h1 {
 	color: red;
 	text-align: center;
 }
 .btn{
 	display: flex;
 	justify-content: space-around;
 	align-items: center;
 }
 button{
 	border: 1px solid red;
 	width: 100px;
 	height: 30px;
 	background: blue;
 	color: white;
 	cursor: pointer;
 }
</style>

  

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108442.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RowBounds分页_bootstrap 分页

    RowBounds分页_bootstrap 分页只要给接口增加一个RowBounds传输就可以了。//下面测试MyBatis自带的分页类RowBounds功能publicList&lt;Role&gt;findByRowBounds(@Param("roleName")Stringrolename,@Param("note")Stringnote,RowBoundsrowBounds);而映射文件不需要任何…

    2022年9月22日
  • python中的 += 与 +

    python中的 += 与 +这一部分首先要理解python内存机制,Python中万物皆对象。对于不可变对象,改变了原来的值,其别名(变量名)绑定到了新值上面,id肯定会改变对于可变对象,+操作改变了值,id肯定会变,而+

    2022年7月3日
  • C# List去重的三种方法「建议收藏」

    C# List去重的三种方法「建议收藏」三种去重的方法1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。2、使用表达式users.Where((x,i)=>users.FindIndex(z=>z.name==x.name)==i)去重,这条语句是查找users中name等于x.name的第一个元素。经实验,这个方法效率最低。3、使用循环,判断每个元素是否重复

    2022年5月25日
  • 二叉树 二叉搜索树_判断二叉树是否是二叉排序树

    二叉树 二叉搜索树_判断二叉树是否是二叉排序树原题链接一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,其左子树中所有结点的键值小于该结点的键值;其右子树中所有结点的键值大于等于该结点的键值;其左右子树都是二叉搜索树。所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。输入格式:输入的第一行给出正整数 N(≤1000)。随后一行给出 N 个整数键值,其间以空格分隔。输出格式:如果输入序列是对一棵二叉搜索树或

    2022年8月8日
  • java单例模式 三种_三种java单例模式概述

    java单例模式 三种_三种java单例模式概述在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的。Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。下面就来介绍一下这三种java单例模式的相关内容。java单例模式是一种常见的设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,这也是…

    2022年7月25日
  • HTML5期末大作业:女装服装商城网站设计——女装服装商城(11页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页

    HTML5期末大作业:女装服装商城网站设计——女装服装商城(11页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页HTML5期末大作业:女装服装商城网站设计——女装服装商城(11页)HTML+CSS+JavaScript学生DW网页设计作业成品web课程设计网页常见网页设计作业题材有个人、美食、公司、学校、旅游、电商、宠物、电器、茶叶、家居、酒店、舞蹈、动漫、明星、服装、体育、化妆品、物流、环保、书籍、婚纱、军事、游戏、节日、戒烟、电影、摄影、文化、家乡、鲜花、礼品、汽车、其他等网页设计题目,A+水平作业,可满足大学生网页大作业网页设

    2022年9月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号