微信小程序拍照页面自定义demo

这篇具有很好参考价值的文章主要介绍了微信小程序拍照页面自定义demo。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

api文档文章来源地址https://www.toymoban.com/news/detail-725304.html

<template>
  <div class="device-cameral">
    <div class="top-device">
      <image style="width: 100%" class="topHeight" :src="imageSrc" v-if="imageSrc">
      </image>
      <camera v-else :device-position="devicePosition" :flash="flash" @error="cameraError" style="width: 100%"
        class="topHeight">
      </camera>
      <i class="icon i-close-bold" @click="goBackPage"></i>
    </div>
    <div class="buttons flex justify-between align-center" v-if="!imageSrc">
      <div class="button" @click="openFlash">
        <image :src="flash === 'off'
          ? cameralImage.FLASH_IMAGE
          : cameralImage.FLASH_IMAGE
          " class="flash-image"></image>
      </div>
      <div class="button cameral flex align-center justify-center" @click="takePhoto">
        <div class="button-inner" :class="clickPhoto ? 'scale-button' : ''"></div>
      </div>
      <div class="button" @click="frontAndAfter">
        <image :src="cameralImage.DEVICEPOSITION_IMAGE" class="flash-image"></image>
      </div>
    </div>
    <div class="buttons flex justify-between align-center text-16 padding-btnTwo" v-else>
      <div class="resetPhoto buttonPhoto" @click="resetPhoto">重新拍照</div>
      <div class="confirmPhoto buttonPhoto" @click="confirmPhoto">确认</div>
    </div>
    <div class="tap-photo" :class="showText ? '' : 'fade-opacity'">
      {{ textSteer }}
    </div>
  </div>
</template>
<script>
import meServiceApi from "@/service/me.js";
import cameralImage from "@/static/images/batteryImage.js";
import { imageFormat } from "@/utils/utils.js";

export default {
  data() {
    return {
      imageSrc: "",
      flash: "off",
      devicePosition: "back",
      cameralImage,
      textSteer: "轻触拍照",
      showText: true,
      time: null,
      clickPhoto: false,
      item: '',
      itemIndex: '',
      type: '',
      imageFormat,
    };
  },
  onShow() {
    this.closeSteer();
  },
  onLoad(option) {
    this.item = JSON.parse(decodeURIComponent(option.item)),
      this.itemIndex = option.itemIndex
    this.type = option.type
  },
  methods: {
    goBackPage() {
      uni.navigateBack({
        delta: 1
      })
    },
    // 两秒后关闭引导
    closeSteer() {
      clearTimeout(this.time);
      const that = this;
      that.time = setTimeout(() => {
        that.showText = false;
      }, 2000);
    },
    // 动态添加动画类
    addAnimation() {
      this.showText = true;
      this.closeSteer();
    },
    takePhoto() {
      const ctx = wx.createCameraContext();
      const that = this;
      this.clickPhoto = true;
      ctx.takePhoto({
        quality: "high",
        success: (res) => {
          that.imageSrc = res.tempImagePath;
          this.clickPhoto = false;
          console.log("拍照的路径", res.tempImagePath);
        },
      });
    },
    cameraError(e) {
      console.log(e.detail);
    },
    openFlash() {
      switch (this.flash) {
        case "off":
          this.flash = "on";
          this.textSteer = "闪光灯打开";
          this.addAnimation();
          break;

        default:
          this.flash = "off";
          this.textSteer = "闪光灯关闭";
          this.addAnimation();
          break;
      }
    },
    frontAndAfter() {
      switch (this.devicePosition) {
        case "back":
          this.devicePosition = "front";
          this.textSteer = "前置打开";
          this.addAnimation();
          break;

        default:
          this.devicePosition = "back";
          this.textSteer = "后置打开";
          this.addAnimation();
          break;
      }
    },
    async confirmPhoto() {
      // 上传到服务器
      console.log(this.imageSrc, "this.imageSrc");
      const res = await meServiceApi.upFileImg(this.imageSrc);
      console.log("上传的图片", res, imageFormat(res.data), this.item, this.item.image);
      this.item.image = imageFormat(res.data)
      let newObject = { ...this.item, itemIndex: this.itemIndex, type: this.type }
      uni.$emit("confirmPhoto", newObject);
      uni.navigateBack({ delta: 1 })
    },
    resetPhoto() {
      this.imageSrc = "";
    },
  },
  mounted() { },
};
</script>
<style scoped lang='scss'>
.device-cameral {
  position: relative;

  .top-device {
    width: 100%;
    height: calc(100vh - 316rpx);

    .topHeight {
      height: calc(100vh - 316rpx);
      width: 100%;
    }

    .i-close-bold {
      position: absolute;
      top: 136rpx;
      left: 48rpx;
      z-index: 555;
    }
  }

  .tap-photo {
    position: absolute;
    color: #fff;
    bottom: 400rpx;
    left: 43%;
    opacity: 1;
  }

  .buttons {
    width: 100%;
    height: 316rpx;
    line-height: 316rpx;
    box-sizing: border-box;
    color: #fff;
    background-color: #000;
    padding: 0 88rpx;
  }

  .padding-btnTwo {
    padding: 20rpx 24rpx;
  }

  .flash-image {
    width: 68rpx;
    height: 68rpx;
  }

  .cameral {
    width: 140rpx;
    height: 140rpx;
    border-radius: 50%;
    border: 3px solid #f5222d;

    .button-inner {
      width: 120rpx;
      height: 120rpx;
      border-radius: 50%;
      background-color: #fff;
    }

    .scale-button {
      transition: transform 0.2s ease;
      /* 定义过渡效果 */
      transform: scale(0.9);
    }
  }

  .buttonPhoto {
    width: 336rpx;
    height: 88rpx;
    box-sizing: border-box;
    text-align: center;
    line-height: 88rpx;
    border-radius: 8rpx;
  }

  .resetPhoto {
    color: #f5222d;
    border: 2rpx solid #f5222d;
    background: #fff;
  }

  .confirmPhoto {
    background: #f5222d;
    color: #fff;
  }

  .fade-opacity {
    opacity: 0;
  }
}
</style>
  

到了这里,关于微信小程序拍照页面自定义demo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序自定义顶部导航,滚动页面顶部导航颜色渐变

    微信小程序自定义顶部导航栏,使背景图置顶;当向上滚动页面时,实现顶部导航颜色渐变 实现方法 代码如下(示例): 提示:由于不同的手机机型顶部导航高度不一样,所有要获取手机的信息 总共三步: 1、初始化获取顶部导航信息 2、顶部导航文字上方通过view占位,同

    2024年02月11日
    浏览(52)
  • 原声微信小程序自定义顶部导航栏 . 自定义navigationBar。 (单页面设置)

    本文实例为大家分享了微信小程序自定义导航栏的具体代码,供大家参考,具体内容如下 实现自定义大致需要以下?步骤: 1.在页面.JSON文件进行相关配置,以便去掉原生 备注:  navigationStyle(导航栏样式),参数: default = 默认样式,custom = 自定义样式。  2.在页面.js文件onLoad生命

    2024年02月09日
    浏览(56)
  • 微信小程序入门与实战之电影页面与实战自定义组件

    Movie自定义组件包含三部分:图片、标题和图片,评分可以再单独写一个组件。 实现代码: css代码中我们通过title里面的属性设置文字省略效果,为了能够直观地感受到效果我们必须给container设置宽度,当文字超过宽度的时候就会显示省略号,效果如下图所示: 首先在自定义

    2024年02月08日
    浏览(48)
  • 【微信小程序】自定义组件布局会议OA其他页面(附源码)

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯🎯 👉点击这里,就可以查看我的主页啦!👇👇 Java方文山的个人主页 🎁如果感觉还不错的话请给我点赞吧!🎁🎁 💖期待你的

    2024年02月08日
    浏览(46)
  • 微信小程序隐私协议自定义页面(弹窗)开发流程以及低版本兼容

    这里我选择的是全局监听,进入小程序就会监控用户有没有同意,没有则进行弹窗,不同意则关闭,这个逻辑可以根据自己需要随便修改。 发现有很多人根据自己调试基础库来排查自己涉不涉及,你的小程序是否涉及隐私协议整改,还是看有没有调用涉及隐私接口,如果有,

    2024年01月16日
    浏览(58)
  • 微信小程序在data中定义页面的数据,以及数据如何使用

    以上代码是一个小程序页面的示例代码,使用了 Page() 方法来定义页面组件。在该页面组件中,定义了一个名为 data 的对象,该对象中包含两个属性: info :表示一个字符串类型的数据,其初始值为 \\\'init data\\\' 。 msgList :表示一个数组类型的数据,其初始值为 [{msg: \\\'hello\\\'}, {ms

    2024年02月04日
    浏览(50)
  • 解决微信小程序自定义tabbar跳转页面图标闪动问题

    情况一    如果你的tabbar对应的页面是component,那就在component下面加上 其中的selected是该tab页面对应的索引值 情况二    如果你的tabbar对应的页面是page,那就将上面的if判断写在page的onshow里面 闪动问题就解决啦~

    2024年02月12日
    浏览(59)
  • 微信小程序拍照解数独

    之前刷数独玩,出于偷懒的思想,总想着用计算机去解决。算法没少些,之前通过手工录入的9x9数据解数独,深度优先遍历算法,很容易。但总想更加方便一点,比如拍照直接解析一个数独的表格,自动解出来。 正好前几天休假,有空,就做了一些尝试,然后基本上给做出来

    2024年02月10日
    浏览(35)
  • uniapp 微信小程序 纯js文件中引入自定义modal组件(无需所有页面手动引入组件)

    工具:uniapp 开发端:微信小程序 其他:uview 2.0 场景:接口请求统一封装中需要对接口返回token失效的情况做modal显示,引导用户退出小程序,我的想法是将modal的默认confirm按钮替换成小程序自带的退出方法: 这样用户点击确认按钮就能退出小程序,因此uni.showModel不满足需求

    2024年02月09日
    浏览(63)
  • 微信小程序TS项目使用mobx(页面直接使用store和自定义组件中使用store)

     注意:下载完成后,需要删除 miniprogram_npm 目录后,重新构建 npm。 注意:ts编写的话,方法中使用this,需要在参数中定义this: any,否则会提示错误 引入onLoad()方法中引入createStoreBindings将store上的方法和属性绑定到页面中 在unOnLoad()方法中销毁destroyStoreBindings() 页面中使用:

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包