uniapp 拍照和从相册选择的弹窗

2023-10-27

1、在common创建一个vue,把下列代码复制进去

<template>
  <view>
    <view class="tui-actionsheet-class tui-actionsheet" :class="[show?'tui-actionsheet-show':'']">
      <view class="tui-tips" :style="{fontSize:size+'rpx',color:color}" v-if="tips">
        {{tips}}
      </view>
      <view :class="[isCancel?'tui-operate-box':'']">
        <block v-for="(item,index) in itemList" :key="index">
          <view class="tui-actionsheet-btn tui-actionsheet-divider"
            :class="[(!isCancel && index==itemList.length-1)?'tui-btn-last':'']"
            hover-class="tui-actionsheet-hover" :hover-stay-time="150" :data-index="index"
            :style="{color:item.color || '#1a1a1a'}" @tap="handleClickItem">{{item.text}}</view>
        </block>
      </view>
      <view class="tui-actionsheet-btn tui-actionsheet-cancel" hover-class="tui-actionsheet-hover"
        :hover-stay-time="150" v-if="isCancel" @tap="handleClickCancel">取消</view>
    </view>
    <view class="tui-actionsheet-mask" :class="[show?'tui-mask-show':'']" @tap="handleClickMask"></view>
  </view>
</template>

<script>
  export default {
    name: "tuiActionsheet",
    props: {
      //点击遮罩 是否可关闭
      maskClosable: {
        type: Boolean,
        default: true
      },
      //显示操作菜单
      show: {
        type: Boolean,
        default: false
      },
      //菜单按钮数组,自定义文本颜色,红色参考色:#e53a37
      itemList: {
        type: Array,
        default: function() {
          return [{
            text: "确定",
            color: "#1a1a1a"
          }]
        }
      },
      //提示文字
      tips: {
        type: String,
        default: ""
      },
      //提示文字颜色
      color: {
        type: String,
        default: "#9a9a9a"
      },
      //提示文字大小 rpx
      size: {
        type: Number,
        default: 26
      },
      //是否需要取消按钮
      isCancel: {
        type: Boolean,
        default: true
      }
    },
    methods: {
      handleClickMask() {
        if (!this.maskClosable) return;
        this.handleClickCancel();
      },
      handleClickItem(e) {
        if (!this.show) return;
        const dataset = e.currentTarget.dataset;
        this.$emit('click', {
          index: dataset.index
        });
      },
      handleClickCancel() {
        this.$emit('chooseCancel');
      }
    }
  }
</script>

<style>
  .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;
  }

  .tui-tips {
    width: 100%;
    padding: 30rpx 60rpx;
    box-sizing: border-box;
    text-align: center;
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
  }

  .tui-operate-box {
    padding-bottom: 12rpx;
  }

  .tui-actionsheet-btn {
    width: 100%;
    height: 100rpx;
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    font-size: 36rpx;
    position: relative;
  }

  .tui-btn-last {
    padding-bottom: env(safe-area-inset-bottom);
  }

  .tui-actionsheet-divider::before {
    content: '';
    width: 100%;
    border-top: 1rpx solid #d9d9d9;
    position: absolute;
    top: 0;
    left: 0;
    -webkit-transform: scaleY(0.5);
    transform: scaleY(0.5);
  }

  .tui-actionsheet-cancel {
    color: #1a1a1a;
    padding-bottom: env(safe-area-inset-bottom);
  }

  .tui-actionsheet-hover {
    background: #f7f7f9;
  }

  .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>

2、在需要用的地方引入新创建的vue

import showActionSheet from '@/common/show-action-sheet/index.vue'

components: {
            showActionSheet
        },

3、使用刚引进来的

<show-action-sheet :tips="showActionSheet.tips" :itemList="showActionSheet.itemList"
            :show="showActionSheet.show" :maskClosable="showActionSheet.maskClosable"
            :isCancel="showActionSheet.isCancel" @chooseCancel="chooseCancel" @click="click"></show-action-sheet>

在data里面:

showActionSheet: {
                    show: false,
                    maskClosable: true,
                    itemList: [{
                            text: "拍摄",
                            color: "#333"
                        },
                        {
                            text: "从相册选择",
                            color: "#333"
                        },
                    ],
                    color: "#9a9a9a",
                    size: 26,
                    isCancel: true
                },

关闭弹窗
this.showActionSheet.show = false;

打开弹窗

this.showActionSheet.show = true;

弹窗里面的取消

chooseCancel() {
                this.showActionSheet.show = false;
            },

点击的是弹窗的那个

click(e){

console.log(e);

}

本人纯属记录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uniapp 拍照和从相册选择的弹窗 的相关文章

  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • 如何使用有角度的材料创建卡片网格?

    我正在尝试使用 ng repeat 创建每行三张卡片的网格 我有一个普通的 javascript 对象数组附加到范围 下面的代码将为每张卡创建一个新行 div div
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐

  • Python项目打包, docker build构建docker镜像, Docker Compose (Docker编配)

    重点摘要 将本地Python项目打包构建docker镜像 并在docker中运行 流程1 8 8 Docker Compose Docker编配 附录 其他常用docker命令 1 首先 完成本地Python的开发 测试 2 1 将项目依赖
  • QT5.9.3中debug问题:DirectWrite: CreateFontFaceFromHDC() failed (Unknown error 0x88985000.) for QFontDef

    今天在迁移同时的代码的时候遇到如下问题 从QT4 8 6迁移到QT5 9 3 MSVC2015 32bit DirectWrite CreateFontFaceFromHDC failed Unknown error 0x88985000
  • SD卡小结

    最近应老板要求 用mega328P做了一个小板用来将串口接收的数据存在SD卡中 主要是保存长时间的一个其他板子的串口log而做的一个小板子 停停顿顿将近2周才做完 中间还做了其他的事情 当然主要原因是水平有限 以前没怎么接触过SD卡和FAT
  • R语言构造扑克牌自动发牌,洗牌

    在R语言构建自动洗牌 发牌 要求 自动洗牌 发牌 任务一 创建一副牌 学会如何使用R的数据类型和数据结构 任务二 编写发牌和洗牌的函数 学习从一个数据集中抽取想要的数值 首先需要创建一副牌 不包括大小王 从R语言的数据对象来看 数据框最合适
  • 微信小程序实现GBK和UTF-8互转

    js虽然有第三方支持的GBK工具 但是小程序没有 而我开发中又需要进行格式的转化 就依据前人的经验做了一份出来 分为两部分 Decode js和Encode js 分别是GBK格式的二进制文件转化为UTF 8的String和反转 impor
  • Linux文件操作(三)

    mkdir和rmdir 我们可以使用mkdir和rmdir来创建和移除目录 其语法如下 include
  • [Android] The connection to adb is down, and a severe error has occured

    一 ADB server didn t ACK在配置完Android环境后 运行第一个程序时 遇到了如下错误 ADB server didn t ACK failed to start daemon 它可能的原因是端口5037被占用 需要查
  • Python OpenCV 基础教程

    Python OpenCV基础教程 文章目录 Python OpenCV 基础教程 1 简介 2 安装 3 使用 3 1 图像操作 加载 显示 保存 3 1 1 读入图像 cv2 imread 3 1 2 显示图像 cv2 imshow 3
  • Maven项目找不到依赖包

    Maven找不到依赖包 今天在打开一个项目的时候 本地仓库是有这个包的 可是maven projects dependencies下的com alibaba dubbo 2 8 4一直出现波浪线提示找不到这个包 后来吧本地的包删掉然后再刷新
  • GSM PA前端插损

    GSM PA前端插损 文章目录 GSM PA前端插损 一 GSM PA前端插损 一 GSM PA前端插损 GSM BAND DRB要求 产线功率上限 PA前插损 PA前插损 850 32 5 1 0 4 0 4 900 32 5 1 0 4
  • 视图库——公安视频侦查数据处理应用中心

    随着城市视频监控系统的不断完善和扩建 视频已经成为社会数据量最大的一类数据 网络甚至流传这样一个段子 电视台新闻行业应该给视频监控行业颁发 最佳素材奖 原因是电视台播放的新闻中 有四分之一的素材来自于视频监控 当然这只是个段子 但无疑也再次
  • 【.NET 6】使用EF Core 访问Oracle+Mysql+PostgreSQL并进行简单增改操作与性能比较

    前言 唠嗑一下 都在说去O或者开源 但是对于数据库选型来说 很多人却存在着误区 例如 去O 狭义上讲 是去Oracle数据库 但是从广义上来说 是去Oracle公司产品或者具有漂亮国垄断地位和需要商业授权的数据库产品 去O 目前国内有一个现
  • DBA 面试题

    一 SQL tuning 类 1 列举几种表连接方式 2 不借助第三方工具 怎样查看sql的执行计划 3 如何使用CBO CBO与RULE的区别 4 如何定位重要 消耗资源多 的SQL 5 如何跟踪某个session的SQL 6 SQL调整
  • echarts分享(四):双y轴图表刻度均匀分布问题

    今天分享一个小问题 内容不多 双y轴图表中 为了图表的美观 经常会隐藏一侧的y轴刻度线 仅显示一侧的刻度线 那么问题就来了 两个y轴的数据数值大小不同 常常会导致刻度线的刻度分布不均匀 该如何解决呢 这里分享下我在项目中所作的处理 首先是要
  • ESP32彩屏开发板(WT32-SC01),除了买买买,你还可以参与一起设计了

    基于ESP32彩屏的开发板已在Git Hub平台上开源给所有的开发者了 硬件参数 显示屏 3 5 英尺 LCD 屏幕 分辨率 320 480 SoC ESP32 WROVER B 模组 CPU 双核 Xtensa 32 bit LX6 MC
  • ESP8266测试Wi-Fi通讯安全

    创建Arduino Sketch include
  • 5.荔枝派 zero(全志V3S)-buildroot配置播放视频

    上面是我的微信和QQ群 欢迎新朋友的加入 1 开启ALSA和MPLAY 编译烧录 2 测试 amixer c 0 sset Headphone 0 100 unmute cd usr bin mplayer root test mp4 3
  • is too old (format 10, created by Subversion 1.6)的解决方案

    svn Working copy E aliyun spirit spiritmap0916 is too old format 10 created by Subversion 1 6 解决方案 对项目进行upgrade 等待刷新完成即可
  • Android SDK+Appium安装及环境配置

    Android SDK环境搭建Xmind思维导图 一 安装SDK先配置环境变量 1 创建 JAVA HOME D Program Files Java jdk1 8 0 05 2 创建 CLASSPATH D Program Files J
  • uniapp 拍照和从相册选择的弹窗

    1 在common创建一个vue 把下列代码复制进去