uniapp&&微信小程序底部弹窗自定义组件

基础弹窗效果组件

javascript 复制代码
<template>
  <view>
    <view
      class="tui-actionsheet-class tui-actionsheet"
      :class="[show ? 'tui-actionsheet-show' : '']"
    >
      <view class="regional-selection">
        底部弹窗
      </view>
    </view>
    <!-- 遮罩层 -->
    <view
      class="tui-actionsheet-mask"
      :class="[show ? 'tui-mask-show' : '']"
      @tap="handleClickMask"
    ></view>
  </view>
</template>

<script>
import { reactive, toRefs, onBeforeMount, onMounted } from "vue";
export default {
  name: "tuiActionsheet",
  props: {
    //点击遮罩 是否可关闭
    maskClosable: {
      type: Boolean,
      default: true,
    },
    //显示操作菜单
    show: {
      type: Boolean,
      default: false,
    },
  },
  setup(props, ctx) {
    const data = reactive({});
    onBeforeMount(() => {});
    onMounted(() => {});
    // 点击遮罩层
    const handleClickMask = () => {
      if (!props.maskClosable) return;
      handleClickCancel();
    };
    // 点击取消
    const handleClickCancel = () => {
      ctx.emit("chooseCancel");
    };
    return {
      handleClickMask,
      handleClickCancel,
      ...toRefs(data),
    };
  },
};
</script>

<style scoped lang="less">
.tui-actionsheet {
  width: 100%;
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 9999;
  visibility: hidden;
  transform: translate3d(0, 100%, 0);
  transform-origin: center;
  transition: all 0.3s ease-in-out;
  // background: #eaeaec;
  min-height: 100rpx;
}

.tui-actionsheet-show {
  transform: translate3d(0, 0, 0);
  visibility: visible;
}
.regional-selection {
    text-align: center;
  height: 400rpx;
  background: #fff;
}
.tui-actionsheet-mask {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.6);
  z-index: 9996;
  transition: all 0.3s ease-in-out;
  opacity: 0;
  visibility: hidden;
}

.tui-mask-show {
  opacity: 1;
  visibility: visible;
}
</style>

在页面使用

父组件showSelection控制底部弹窗显示隐藏

maskClosable控制是否点击遮罩层关闭

chooseCancel弹窗触发关闭事件

html 复制代码
 <!-- 底部弹窗 -->
    <regional-selection
      :show="showSelection"
      :maskClosable="true"
      @chooseCancel="chooseCancel"
    ></regional-selection>
javascript 复制代码
 const chooseCancel = () => {
      data.showSelection = false;
    };

效果预览

相关推荐
多看书少吃饭12 分钟前
从 ScriptProcessor 到 AudioWorklet:Electron 桌面端录音实践总结
前端·javascript·electron
user714226596457817 分钟前
react中useMemo和useCallback的使用场景
前端
JS_GGbond20 分钟前
前端水印实战:给你的页面穿上“隐形盔甲”
前端
Sthenia24 分钟前
如何用 Chrome DevTools 定位 Long Task:一份从零到实战的排查笔记
前端·性能优化
用户222645989434136 分钟前
CSS单位全解析:从像素到视口的响应式设计
前端
Mapmost37 分钟前
【实景三维】还再为渲染发愁?手把手教你大场景如何实现“精细”与“流畅”平衡!
前端
钱多多81038 分钟前
Vue版本降级操作指南(解决依赖冲突与版本不一致问题)
前端·javascript·vue.js·前端框架
门思科技38 分钟前
门思科技正式开放 ThinkLink 纯国产化物联网平台免费部署方案
javascript·科技·物联网
San3041 分钟前
深度解析 React 组件化开发:从 Props 通信到样式管理的进阶指南
前端·javascript·react.js
AAA阿giao41 分钟前
深度解析 React 项目架构:从文件结构到核心 API 的全面拆解
前端·javascript·react.js