效果图示例:
功能描述:
向上拖动不到弹窗的一半 保持不变
向上拖动超过弹窗的一半 隐藏
不拖动,n秒后 自动消失
组件:
<template>
<view class="box" v-if="data.show" :style="{ top: data.top + 'px' }">
<view
:class="'message ' + (data.ismsg === 'start' ? 'open' : data.ismsg === 'end' ? 'close' : data.ismsg === 'timeout' ? 'timeout': '')"
@touchstart.stop.prevent="handleTouchStart" @touchmove.stop="handleTouchMove"
@touchend.stop.prevent="handleTouchEnd" :style="{ transform: `translate(0px, ${data.translateY}px)` }">
<slot></slot>
</view>
</view>
</template>
<script lang="ts" setup>
import {
reactive } from "vue"
const handleTouchStart = (event) => {
data.isModalStart = true
data.translateY = event.target.offsetTop;
data.tranY = event.changedTouches[0].pageY
}
const handleTouchMove = (event) => {
// 如果向下拖动
if (data.tranY - event.changedTouches[0].pageY <= 0) {
return