ucToast 支持position:top/bottom

This commit is contained in:
陆柯 2020-08-17 07:56:42 +08:00
parent 7bec07d04b
commit a2d4c4b9af
2 changed files with 246 additions and 239 deletions

View File

@ -9,11 +9,21 @@ based on
*duration: 消失时间Number默认2000 *duration: 消失时间Number默认2000
*distance: 弹窗间距默认128可设为0代表重叠 *distance: 弹窗间距默认128可设为0代表重叠
*clickable: 是否点击消失Boolean默认false *clickable: 是否点击消失Boolean默认false
*position: top|bottom, 出现在屏幕顶部或底部默认为 top
--> -->
<template> <template>
<view class="popup_list"> <view class="popup_list">
<view v-for="(toast, index) of popup_list" :id="toast.uuid" :key="toast.uuid"> <view v-for="(toast, index) of popup_list" :id="toast.uuid" :key="toast.uuid">
<view class="mpopup" :style="{ background: toast.color ,top:index*toast.distance+50+'px'}" :class="[toast.animator,'mpopup-'+toast.type]" @click="close(toast.uuid,index)"> <view
class="mpopup"
:style="{
background: toast.color,
top: toast.position === 'top' ? index * toast.distance + 50 + 'px' : 'initial',
bottom: toast.position === 'bottom' ? index * toast.distance + 50 + 'px' : 'initial',
}"
:class="[toast.animator, 'mpopup-' + toast.type]"
@click="close(toast.uuid, index)"
>
<view class="icon"></view> <view class="icon"></view>
<text class="text">{{ toast.content }}</text> <text class="text">{{ toast.content }}</text>
</view> </view>
@ -28,17 +38,13 @@ based on
popup_list: [], // popup_list: [], //
} }
}, },
props:{ props: {},
},
methods: { methods: {
open: function (toast) { open: function (toast) {
//uuid toast.uuid = this.guid() //uuid
let uuid=this.guid() toast.animator = 'fade_Down' //
toast.uuid=uuid toast.clickable = toast.clickable || false //
// toast.position = toast.position || 'top'
toast.animator='fade_Down'
toast.clickable = toast.clickable || false ///
toast.duration = toast.duration || 1500 toast.duration = toast.duration || 1500
toast.distance = toast.distance || 128 // toast.distance = toast.distance || 128 //
toast.type = toast.type || 'info' toast.type = toast.type || 'info'
@ -48,15 +54,15 @@ based on
if (!toast.clickable) { if (!toast.clickable) {
this.disappear(toast.uuid, toast.duration, toast.complete) this.disappear(toast.uuid, toast.duration, toast.complete)
}else{ // } else {
//
this.$emit('uuidCallback', toast.uuid) this.$emit('uuidCallback', toast.uuid)
} }
}, },
// //
disappear: function (uuid, duration, complete) { disappear: function (uuid, duration, complete) {
//退 //退
this.fade_out_animator(uuid,duration).then(res=>{ this.fade_out_animator(uuid, duration).then((res) => {
setTimeout(() => { setTimeout(() => {
for (let i = 0; i < this.popup_list.length; i++) { for (let i = 0; i < this.popup_list.length; i++) {
if (this.popup_list[i].uuid == res) { if (this.popup_list[i].uuid == res) {
@ -65,7 +71,7 @@ based on
this.$forceUpdate() this.$forceUpdate()
} }
} }
if (typeof(complete)==='function'){ if (typeof complete === 'function') {
complete() complete()
} }
}, 250) }, 250)
@ -73,8 +79,10 @@ based on
}, },
fade_out_animator: function (uuid, duration) { fade_out_animator: function (uuid, duration) {
//duration退 //duration退
if(!duration||typeof(duration)!='number'){duration=1500} if (!duration || typeof duration != 'number') {
return new Promise(res=>{ duration = 1500
}
return new Promise((res) => {
setTimeout(() => { setTimeout(() => {
for (let i = 0; i < this.popup_list.length; i++) { for (let i = 0; i < this.popup_list.length; i++) {
if (this.popup_list[i].uuid == uuid) { if (this.popup_list[i].uuid == uuid) {
@ -89,7 +97,9 @@ based on
// //
close: function (uuid, ind) { close: function (uuid, ind) {
if (ind) { if (ind) {
if(!this.popup_list[ind].clickable){return} if (!this.popup_list[ind].clickable) {
return
}
} }
this.remove_element(uuid).then((res) => { this.remove_element(uuid).then((res) => {
setTimeout(() => { setTimeout(() => {
@ -106,7 +116,7 @@ based on
}, },
// //
remove_element: function (uuid) { remove_element: function (uuid) {
return new Promise(res=>{ return new Promise((res) => {
for (var i = 0; i < this.popup_list.length; i++) { for (var i = 0; i < this.popup_list.length; i++) {
if (this.popup_list[i].uuid == uuid) { if (this.popup_list[i].uuid == uuid) {
this.popup_list[i].animator = 'fade_Top' this.popup_list[i].animator = 'fade_Top'
@ -115,13 +125,12 @@ based on
} }
} }
}) })
}, },
// //
update: function (update_list) { update: function (update_list) {
for (var i = 0; i < this.popup_list.length; i++) { for (var i = 0; i < this.popup_list.length; i++) {
if (this.popup_list[i].uuid == update_list.uuid) { if (this.popup_list[i].uuid == update_list.uuid) {
this.popup_list[i].type=update_list.type; this.popup_list[i].type = update_list.type
this.init(this.popup_list[i]) this.init(this.popup_list[i])
this.popup_list[i].content = update_list.content this.popup_list[i].content = update_list.content
break break
@ -131,11 +140,12 @@ based on
//uuid //uuid
guid: function () { guid: function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8) var r = (Math.random() * 16) | 0,
v = c == 'x' ? r : (r & 0x3) | 0x8
return v.toString(16) return v.toString(16)
}) })
} },
} },
} }
</script> </script>
@ -148,14 +158,16 @@ based on
align-items: center; align-items: center;
min-height: 45px; min-height: 45px;
max-width: 80%; max-width: 80%;
transition :all .5s; transition: all 0.5s;
position: fixed; position: fixed;
right: 0; right: 0;
left: 0; left: 0;
margin: 0 auto; margin: 0 auto;
border-radius: 5px; border-radius: 5px;
z-index: 998; z-index: 998;
@media screen and (min-width: 751px) { max-width: 500px } @media screen and (min-width: 751px) {
max-width: 500px;
}
.icon { .icon {
display: flex; display: flex;
@ -194,7 +206,6 @@ based on
.icon { .icon {
background-image: url('data:image/png;base64,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'); background-image: url('data:image/png;base64,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');
} }
} }
.mpopup-info { .mpopup-info {
background: #edf2fc; background: #edf2fc;
@ -220,8 +231,7 @@ based on
animation: fadeInTop 0.5s forwards; animation: fadeInTop 0.5s forwards;
} }
/*从上到下*/ /*从上到下*/
@keyframes fadeInDown @keyframes fadeInDown {
{
from { from {
opacity: 0; opacity: 0;
-webkit-transform: translate(0, -100px); -webkit-transform: translate(0, -100px);
@ -234,22 +244,19 @@ based on
} }
} }
/*从下到上*/ /*从下到上*/
@keyframes fadeInTop @keyframes fadeInTop {
{
from { from {
opacity: 1; opacity: 1;
-webkit-transform: translate(0, 10px); -webkit-transform: translate(0, 10px);
transform: stranslate(0, 10px); transform: stranslate(0, 10px);
} }
to { to {
opacity: 0; opacity: 0;
-webkit-transform: translate(0, -100px); -webkit-transform: translate(0, -100px);
transform: stranslate(0, -100px); transform: stranslate(0, -100px);
} }
} }
@keyframes rotate360 @keyframes rotate360 {
{
from { from {
transform: rotate(0); transform: rotate(0);
} }

View File

@ -112,7 +112,7 @@ module.exports = {
cloudPath = tempFiles[0].name cloudPath = tempFiles[0].name
// #endif // #endif
} else if (mediaType === 'video') { } else if (mediaType === 'video') {
let [errorChoose, { tempFilePath, tempFile, name }] = await uni.chooseVideo({ sourceType }) let [errorChoose, { tempFilePath, tempFile, duration, size, width, height, name }] = await uni.chooseVideo({ sourceType })
filePath = tempFilePath filePath = tempFilePath
cloudPath = 'cloud.mp4' cloudPath = 'cloud.mp4'
// #ifdef H5 // #ifdef H5