uniapp小程序自定义扫码页面创建及其完善

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

先上效果图:

uniapp自定义扫码界面,uni-app,小程序,javascript,Powered by 金山文档
  1. 同页面插入一个camera组件

uniapp自定义扫码界面,uni-app,小程序,javascript,Powered by 金山文档

其中应用到图片选择、cover-image、cover-view实现动画扫码功能。

uniapp自定义扫码界面,uni-app,小程序,javascript,Powered by 金山文档

不多说马上上代码!

<!-- 扫一扫 -->
<template>
  <view class="scan-view">
    <view class="scan-border">
      <camera
        class="scan-camera"
        @scancode="onScancode"
        @error="onError"
        mode="scanCode"
        device-position="back"
        flash="off"
      >
        <cover-view
          class="scan-animation"
          animation="{{animation}}"
        ></cover-view>
        <cover-view class="scan-pict"
          ><cover-image
            @click="onPhoto"
            class="pic"
            src="../../static/images/selectpic.png"
          ></cover-image>
        </cover-view>
      </camera>
      <button type="primary" class="btns" @click="gorepairs">手动报修</button>
      <button type="primary" class="btns">电话报修</button>
      <!-- 这里可以处理其他内容 -->
    </view>
  </view>
</template>
<script>
import * as utils from "@/util/util";
let animation = uni.createAnimation({});
let innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
innerAudioContext.src = "../../static/voice/deep.mp3";
export default {
  data() {
    return {
      animation,
      hasScan: false, // false 还未跳转,true 已跳转一次
    };
  },
  onLoad() {},
  onShow() {
    this.donghua();
  },
  methods: {
    // 从相册中选择图片
    onPhoto() {
      uni.chooseImage({
        count: 1, //默认9
        sizeType: ["original", "compressed"], //可以指定是原图还是压缩图,默认二者都有
        sourceType: ["album"], //从相册选择
        success: function (res) {
          console.log(JSON.stringify(res.tempFilePaths));
        },
      });
    },

    // 动画闪电条
    donghua() {
      let that = this;
      let scode = true;
      setInterval(
        function () {
          if (scode) {
            animation.translateY(250).step({
              duration: 1500,
            });
            scode = !scode;
          } else {
            animation.translateY(-10).step({
              duration: 1500,
            });
            scode = !scode;
          }
          that.animation = animation.export();
        }.bind(this),
        1500
      );
    },
    //手动选择 跳转填写工单
    gorepairs() {
      uni.navigateTo({
        url: `/pages/repair/repairs`,
      });
    },
    onHide() {
      // 生命周期回调—监听页面隐藏
      this.hasScan = false;
    },
    onUnload() {
      //生命周期回调—监听页面卸载
      this.hasScan = false;
    },
    onScancode: utils.throttle(function (e) {
      let res = e.detail.result;
      if (!this.hasScan) {
        uni.navigateTo({
          url: `/pages/repair/repairs?data=${encodeURIComponent(
            JSON.stringify(res)
          )}`,
          success: function () {
            this.hasScan = true;
            innerAudioContext.onPlay(() => {
              console.log("开始播放");
            });
          },
        });
      }
    }, 1000),
  },
};
</script>
<style lang="scss" scoped>
.scan-view {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  background-color: #ffffff;
  position: fixed;
  align-items: center;
  justify-content: space-around;
}

.scan-border {
  width: 100%;
  height: 100%;
  /* border: 6rpx solid #08FDFE; */
  display: flex;
  flex-direction: column;
  align-items: center;

  .scan-camera {
    width: 100%;
    height: 86.4%;
    border-radius: 6rpx;
  }
}

.scan-animation {
  position: absolute;
  top: 24%;
  left: 20%;
  width: 480rpx;
  height: 8rpx;
  background-color: #0091ff;
  border-radius: 50%;
}
.btns {
  margin: 10rpx;
  width: 100%;
  background-color: #0091ff;
}
.scan-pict {
  position: absolute;
  right: 1%;
  bottom: 1%;
  width: 70rpx;
  height: 70rpx;
  z-index: 20;
  border-radius: 50%;
  background-color: #c0c0c0;
  opacity: 0.8;
  .pic {
    z-index: 999;
    width: 50rpx;
    height: 50rpx;
    margin: 10rpx;
  }
}
</style>

参考链接camera | uni-app官网 (dcloud.net.cn)

2.utils.throttle 方法:

// utils.js
 
/**
 * 防止小程序多次点击跳转
 * @param {*} obj 
 * @returns 
 */
export function throttle(fn, gapTime) {
    if (gapTime == null || gapTime == undefined) {
        gapTime = 1500
    }
 
    let _lastTime = null
 
    // 返回新的函数
    return function () {
        let _nowTime = + new Date()
        if (_nowTime - _lastTime > gapTime || !_lastTime) {
            fn.apply(this, arguments)   //将this和参数传给原函数
            _lastTime = _nowTime
        }
    }
}

3.接收参数页面

// 设备信息(扫一扫)
    if (options && options.data) {
      // 拿到参数
      this.optionsData = JSON.parse(decodeURIComponent(options.data)); 
      // 获取设备详情
      this.selectById(JSON.parse(this.optionsData));
    }

以上主要参考http://t.csdn.cn/gsn1I中博主的分享,再进行个人更改去改善为自己所需的自定义扫码页面。文章来源地址https://www.toymoban.com/news/detail-517192.html

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

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

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

相关文章

  • uniapp微信小程序全局分享和自定义页面分享

    uniapp 实现微信小程序的全局 转发给好友/分享到朋友圈 的功能。主要使用 Vue.js 的 全局混入 概念。 1.在项目根目录创建mixins文件夹,然后创建全局分享的 js 文件。mixins/share.js  2.在项目的 main.js 文件中引入该 share.js 文件并使用 Vue.mixin() 方法将之全局混入: 3.自定义页

    2024年02月13日
    浏览(62)
  • uniapp实现扫一扫功能,扫码成功后跳转页面

    uniapp官方有提供的相关api实现跳转到web网页(h5)的功能,在开发小程序中,是一项很常见的功能开发。该功能使用到的api uni.scanCode 详细步骤如下: 1.在ui库中找到扫码icon,以uViewUI为例 绑定点击事件@click 2. 在事件clickScan中处理逻辑 3. 在src文件夹中写一个组件,我定义为w

    2024年02月07日
    浏览(38)
  • uniapp小程序中的导航如何设置图片 自定义导航栏 +页面跳转+页面回退

    要让uniapp中的背景图片全屏,可以在 style 标签中添加以下样式:  page {     background-image: url(\\\'/static/bg.jpg\\\');     background-size: cover;     background-repeat: no-repeat;     background-position: center center; } 在这个样式中,background-image属性设置背景图片的URL,background-size属性设置背景图片的

    2024年02月15日
    浏览(44)
  • uniapp小程序自定义签名面板组件,小程序页面引用实现横屏签字(亲测有效)

    需求: uniapp小程序自定义签字面板组件, canvas手写签名画板, 小程序页面引用实现横屏签字 实现效果: 在项目中创建components文件夹, 在文件夹下创建my-sign组件, 组件下创建my-sign.vue和index.js my-sign.vue组件代码: index.js代码: 在pages.json中添加\\\"pageOrientation\\\": “landscape”, pageOrientation 设

    2024年02月05日
    浏览(45)
  • uniapp 小程序 地图<map> 渲染标注点 且自定义气泡内容(slot写到页面中/样式自定义)

    效果图: (气泡可随意定义样式) 页面内容:  (slot为自定义标注气泡) 获取经纬度方法: 数据整理方法: (整理各坐标点经纬度和信息到maekers中) css内容:

    2024年02月13日
    浏览(35)
  • uniapp 开发小程序的时候使用自定义 tabbar 时出现切换页面闪烁的情况

    问题:在使用自定义组件的时候可以看到页面切换明显的闪烁, 这种体验是很不好的, 当然最好的方式就是使用原生导航栏, 不要搞花里胡哨的东西。 来看下体验不好的效果 优化调整 先说思路,就是仍然设置原生 tabbar, 在应用启动的时候主动隐藏原生 tabbar, 然后使用自定义组

    2024年02月03日
    浏览(41)
  • uniapp小程序当页面内容超出时显示滚动条,不超出时不显示---样式自定义

    使用scroll-view中的show-scrollbar属性 注意:需要搭配enhanced使用 否则无效 滚动条样式自定义 注意:此代码在ios情况下滚动条需要滑动时才显示并且不滑动过后就会隐藏 安卓情况下正常显示

    2024年01月22日
    浏览(52)
  • uniapp 微信小程序:扫码

    HBuilderX 创建一个新项目,直接用默认模板 添加一个【扫码】按钮,绑上点击事件。 使用 uni.scanCode 调起客户端扫码界面,扫码成功后返回对应的结果。 界面 演示 camera 之 scanCode模式扫码 扫码结果: HBuilderX 创建一个新项目,直接用默认模板 添加一个 camera 组件,如下调整。

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

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

    2024年02月09日
    浏览(70)
  • 微信扫码进入小程序特定页面

    小程序配置 开发 - 开发管理 - 开发设置-普通链接二维码打开小程序 配置好的截图 如下:二维码规则建议是自己的域名 + /mini/ 功能页面 pages/index/index 是为了方便跳转其他页面 记得把校验文件发给后端 web 端处理 二维码格式为: 二维码规则/功能页/你想跳转的页面 小程序处

    2024年01月22日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包