基于Vant UI的微信小程序开发(随时更新的写手)

news2024/11/19 1:50:33

基于Vant UI的微信小程序开发✨

    • (一)悬浮浮动
      • 1、效果图:只要无脑引用样式就可以了
      • 2、页面代码
      • 3、js代码
      • 4、样式代码
    • (二)底部跳转
      • 1、效果图:点击我要发布跳转到发布的页面
      • 2、js代码
      • 3、页面代码
      • 4、app.json代码配置底部导航:tabBar
    • (三)上传组件:实现图片/文件上传预览、上传数量限制、大小限制、删除、点击之后列表查看
      • 1、效果图
      • 2、js代码:借助的是微信小程序开发工具的缓存路径的代码,返回的微信小程序图片路径进行预览,下面第三个才是回调自己的上传接口进行预览操作,我会再写一篇关于阿里云对象存储的文章帮助大家实现
      • 3、上传的重要代码:替换了借助的是微信小程序开发工具的缓存路径的代码部分
      • 4、页面代码
    • (四)图片预览
      • 1、使用vant组件:van-image
        • (1)js代码
        • (2)html代码
      • 2、使用image

食用本篇文章的前提是你引入了Vant-UI,自己看如何引入,一定要注意是小程序版,up已经贴心的附上了链接:Vant Weapp轻量、可靠的小程序 UI 组件库

(一)悬浮浮动

1、效果图:只要无脑引用样式就可以了

在这里插入图片描述

2、页面代码

<view class="float-icon" bind:tap="toQiuZhiFaBu">
     <van-icon name="add" color="#31df80" info="求职发布" size="50px" />
</view>

3、js代码

 /**跳转到我的发布-求职发布 */
  toQiuZhiFaBu() {
    wx.navigateTo({
      url: '/pages/record/QiuZhiFaBu/index',
    })
  },

4、样式代码

.float-icon {
  position: fixed;
  bottom: 10%;
  right: 10%;
  z-index: 99;
  border-radius: 50rpx;
  background-color: white;
  display: flex;
  justify-content: center;
}

(二)底部跳转

1、效果图:点击我要发布跳转到发布的页面

在这里插入图片描述

2、js代码

toWoyaofabu() {
    wx.switchTab({
      url: '/pages/record/index',
    })
  },

3、页面代码

<view style="width: 23%;height: 200rpx;text-align: center;" bind:tap="toWoyaofabu">
      <view style="width: 100rpx;height: 100rpx;margin: 10rpx auto;background-image: url('https://zhihuifile.oss-cn-qingdao.aliyuncs.com/chacheyoufu/assets/carousel/%E6%88%91%E8%A6%81%E5%8F%91%E5%B8%83%E7%BB%BF%E7%89%88.png');background-size: 100% 100%;border-radius: 20rpx; "></view>
      <text style="font-size: 13px;">我要发布</text>
</view>

4、app.json代码配置底部导航:tabBar

"tabBar": {
    "color": "#000",
    "selectedColor": "#31df80",
    "borderStyle": "black",
    "backgroundColor": "#ffffff",

    "list": [{
        "pagePath": "pages/index/index",
        "text": "首页",
        "iconPath": "/assets/tabBar/index1.png",
        "selectedIconPath": "/assets/tabBar/index1-select.png",
        "iconSize": 10
      },
      {
        "pagePath": "pages/exam/index/index",
        "text": "商城",
        "iconPath": "/assets/tabBar/shopping.png",
        "selectedIconPath": "/assets/tabBar/shopping-select.png"

      },
      {
        "pagePath": "pages/record/index",
        "text": "发布",
        "iconPath": "/assets/tabBar/publish.png",
        "selectedIconPath": "/assets/tabBar/publish-select.png"
      },
      {
        "pagePath": "pages/shoppingCart/index",
        "text": "购物车",
        "iconPath": "/assets/tabBar/shoppingcart.png",
        "selectedIconPath": "/assets/tabBar/shoppingcart-select.png"
      },
      {
        "pagePath": "pages/my/index/index",
        "text": "个人中心",
        "iconPath": "/assets/tabBar/my1.png",
        "selectedIconPath": "/assets/tabBar/my1-select.png"
      }

    ]
  },

(三)上传组件:实现图片/文件上传预览、上传数量限制、大小限制、删除、点击之后列表查看

1、效果图

上传数量限制点击预览删除大小限制
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2、js代码:借助的是微信小程序开发工具的缓存路径的代码,返回的微信小程序图片路径进行预览,下面第三个才是回调自己的上传接口进行预览操作,我会再写一篇关于阿里云对象存储的文章帮助大家实现

/**上传文件 */
  afterRead(event) {
    let that = this;
    const {
      file
    } = event.detail;
    console.log("file=========", file);
    // 此处借助的是微信小程序开发工具的缓存路径
    wx.getFileSystemManager().saveFile({
      tempFilePath: file.url, // 临时文件路径
      success(res) {
        // 保存文件成功后,将文件的本地路径添加到 imageCoverPath 数组中
        const savedFilePath = res.savedFilePath;
        const newImage  = {
          url: savedFilePath,
          isImage: true,
        }
        const imageCoverPath = that.data.imageCoverPath;
        imageCoverPath.push(newImage);
        that.setData({
          imageCoverPath: imageCoverPath
        });
        console.log("");
      },
      fail(err) {
        // 保存文件失败的处理
        console.log('保存文件失败', err);
      }
    });
  },
  /**删除文件 */
  deleteFile(event) {
    const {
      index
    } = event.detail; // 获取要删除的文件索引
    const imageCoverPath = this.data.imageCoverPath;
    imageCoverPath.splice(index, 1); // 从数组中移除指定索引的文件
    this.setData({
      imageCoverPath: imageCoverPath // 更新数据
    });
  },
  
  /**预览图片 */
  previewImage(event) {
    // 获取点击的图片索引
    const {
      index
    } = event.detail;
    // 获取当前图片的预览路径
    const current = this.data.imageCoverPath[index];
    // 预览图片
    console.log("预览图片========", current, event.detail.index, this.data.imageCoverPath);
    wx.previewImage({
      current: current, // 当前显示图片的链接
      urls: this.data.imageCoverPath // 所有图片的链接数组
    });
  },
      /**方法通用 */
      /**上传前校验 */
  beforeRead(event) {
    const {
      file,
      callback
    } = event.detail;
    callback(file.type === 'image');
    if (file.type != 'image') {
      wx.showToast({
        title: '请上传图片',
      })
    }
  },

  /**文件尺寸过大 */
  overSizeI() {
    wx.showToast({
      title: '尺寸过大',
      icon: "error"
    })
  },

3、上传的重要代码:替换了借助的是微信小程序开发工具的缓存路径的代码部分

afterRead(event) {
    let that = this;
    const {
      file
    } = event.detail;
    const token = wx.getStorageSync('token');
    console.log("file=========", file,"token",token);
    // 设置请求头部信息
    const header = {
      'token': token,
    };
    // 上传图片
    wx.uploadFile({
      url: app.globalData.baseAPI+'/api/wx/student/file/upload', // 服务器地址
      filePath: file.tempFilePath, // 图片的路径
      name: 'file', // 文件对应的 key,开发者在服务器端通过这个 key 可以获取到文件
      formData: { // HTTP 请求中其他额外的 form data
        'user': 'test'
      },
      header: header,
      success: function (res) {
        // 服务器成功响应处理
        if (res.statusCode == 200) {
          var data = res.data; // 服务器返回的数据
          console.log(data);
          // 在这里处理服务器返回的数据,例如,解析JSON
          var jsonData = JSON.parse(data);
          if (jsonData.code === 1) {
            // 保存文件成功后,将文件的本地路径添加到 imageCoverPath 数组中
            const savedFilePath = jsonData.response;
            const newImage = {
              url: savedFilePath,
              isImage: true,
            }
            const imageCoverPath = that.data.certificate;
            imageCoverPath.push(newImage);
            that.setData({
              certificate: imageCoverPath
            });
          } else {
            wx.showToast({
              title: '发布失败',
              icon: 'error',
            })
          }
        }
      },
      fail: function (error) {
        // 请求失败处理
        wx.showToast({
          title: '上传失败',
          icon: 'none',
        })
        console.error('uploadFile fail', error);
      }
    });
  },

4、页面代码

<view style="margin-top: 20px;background-color: white;">
        <van-field label="车辆图片(正、后、左、右方)/描述" required title-width="500rpx" readonly>
        </van-field>
        <view style="margin-left: 2%;margin-right: 2%;">
          <van-uploader file-list="{{ imageCoverPath }}" accept="image" max-count="4"
           use-before-read="true" deletable="{{ true }}" preview-size="120px" upload-text="上传4M以内的图片" bind:delete="deleteFile" bind:before-read="beforeRead" preview-image="true" bind:after-read="afterRead" bind:click-preview="previewImage" bind:oversize="overSizeI" capture="camera" max-size="4194304" />
        </view>
      </view>

(四)图片预览

1、使用vant组件:van-image

(1)js代码
 /**点击图片显示预览 */
  previewImage(e) {
    console.log(e,e.currentTarget);
    const currentSrc = e.currentTarget.dataset.src;
    const urls = this.data.releaseSheBeiRentalInfo.imageCoverPath; // releaseDetailsInfo.certificate是一个包含所有图片URL的数组
    wx.previewImage({
      current: currentSrc, // 当前显示图片的链接
      urls: urls // 需要预览的图片链接列表
    });
  },
(2)html代码
<view style="background-color: white;">
        <view style="font-weight: bold;margin: 0 0 20rpx 30rpx;padding-top: 30rpx;">前后左右照片:</view>
        <view wx:for="{{releaseSheBeiRentalInfo.imageCoverPath}}" wx:key="index" style="display: flex;flex-direction: column;line-height: 1.5;align-items: center;justify-content: center;padding: 20rpx;">
          <van-image wx:if="{{item}}" width="620rpx" height="400rpx" fit="fill" src="{{item}}" data-src="{{item}}" lazy-load bind:click="previewImage" />
        </view>
        <!-- <view wx:if="{{releaseSheBeiRentalInfo.imageCoverPath===0}}" wx:key="index" style="display: flex;flex-direction: column;line-height: 1.5;align-items: center;justify-content: center;padding: 20rpx;">
          <view width="620rpx" height="400rpx">
            <text style="color:#ccc;">未上传照片</text>
          </view>
        </view> -->
      </view>

2、使用image

 <image style="width: 100%; height: 200rpx;" bind:tap="previewImage" data-src="{{item}}" fit="fill" src="{{item}}" />

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1662161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32CubeMX软件使用(超详细)

1、Cube启动页介绍 2、芯片选择页面介绍 3、输入自己的芯片型号&#xff0c;这里以STM32U575RIT6举例 4、芯片配置页码介绍 5、芯片外设配置栏详细说明 6、点击ClockConfiguration进行时钟树的配置&#xff0c;选择时钟树后可以选择自己想使用的时钟源&#xff0c;也可以直接输…

LeetCode题练习与总结:反转链表Ⅱ--92

一、题目描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#…

e 值的故事:从复利到自然增长的数学之旅

自然对数函数的底数 e&#xff08;也称为自然常数或欧拉数&#xff09;与 π 一样&#xff0c;是数学中最伟大的常数之一。它大约为 2.718281828&#xff0c;是一个无理数&#xff0c;意味着它的小数部分无限且不重复。 与 π 和 √2 这些由几何发现而来的常数不同&#xff0c…

【高阶数据结构】图 -- 详解

一、图的基本概念 图 是由顶点集合及顶点间的关系组成的一种数据结构&#xff1a;G (V&#xff0c; E)。其中&#xff1a; 顶点集合 V {x | x属于某个数据对象集} 是有穷非空集合&#xff1b; E {(x,y) | x,y属于V} 或者 E {<x, y> | x,y属于V && Path(x, y…

解决常见的Android问题

常见问题&#xff1a; 1、查杀&#xff1a; 查杀一般分为两个方向一种是内存不足的查杀&#xff0c;一种的是因为温度限频查杀&#xff0c;统称为内存查杀&#xff0c;两个问题的分析思路不同 1、内存不足查杀&#xff1a; 主要是因为当用户出现后台运行多个APP或者是相机等…

LeetCode96:不同的二叉搜索树

题目描述 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 代码 /*dp[i]&#xff1a;表示i个节点有dp[i]个不同的二搜索叉树递推公式&#xff1a;dp[i] dp[j-1] * dp[i-j], j…

【JavaSE】/*运算符—快速总结*/

目录 前言 一、什么是运算符 二、算术运算符 三、增量运算符 四、自增/自减运算符 五、关系运算符 六、逻辑运算符 七、位运算符 八、移位运算符 九、条件运算符 十、运算符的优先级 前言 Java 中的运算符和 C语言 的运算符规则有很多类型的地方&#xff0c;我们只…

K8s源码分析(二)-K8s调度队列介绍

本文首发在个人博客上&#xff0c;欢迎来踩&#xff01; 本次分析参考的K8s版本是 文章目录 调度队列简介调度队列源代码分析队列初始化QueuedPodInfo元素介绍ActiveQ源代码介绍UnschedulableQ源代码介绍**BackoffQ**源代码介绍队列弹出待调度的Pod队列增加新的待调度的Podpod调…

LinkedList链表

LinkedList 的全面说明 LinkList底层实现了双向链表和双端队列特点可以添加任意元素&#xff08;元素可以重复&#xff09;&#xff0c;包括null线程不安全&#xff0c;没有实现同步 LinkedList 的底层操作机制 LinkedList底层维护了一个双向链表LinkList中维护了两个属性fi…

【C#进阶】简单数据结构类

简单数据结构类 文章目录 1、Arraylist1、ArrayList的本质2、声明3、增删查改4、装箱拆箱思考 背包售卖 2、Stack1、Stack的本质2、声明3、增取查改4、遍历思考 计算一个数的二进制 3、Queue1、Queue的本质2、声明3、增取查改4、遍历思考 每隔一段时间打印一条消息 4、Hashtab…

运营商的mpls专线

在当今高速发展的数字化时代&#xff0c;网络已成为企业发展不可或缺的基础设施。作为企业网络 连接的重要组成部分&#xff0c;MPLS专线在运营商的推动下逐渐成为了企业选择的首选。 MPLS&#xff08;Multi-Protocol Label Switching&#xff09;是一种基于标签的交换技术&am…

QT C++(QWidget类及其常见的属性)

文章目录 1. QWidget类及其常见的属性 1. QWidget类及其常见的属性 QT各种控件都是继承自QWidget类&#xff0c;QWidget类是QT控件体系中通用的部分。 QWidget属性如下图 常见的QT属性为&#xff1a; enabled&#xff1a;描述控件是否处于可用状态&#xff08;禁用状态这个…

ssrf学习2——内网ip绕过

环回地址绕过 尝试访问内网 也就是127.0.0.1里面的flag.php 但是如果真的去访问127.0.0.1/flag.php 还是不行 也就是说127.0.0.1被过滤了 进制转换 127.0.0.1是点分十进制 可以用二进制八进制十六进制来绕过过滤 0x7F000001/flag.php 017700000001/flag.php(八进制前面是…

Yolov8目标检测——在Android上部署Yolov8 tflite模型

1. 简介 YOLOv8 是一种用于目标检测的深度学习模型&#xff0c;它是 YOLO&#xff08;You Only Look Once&#xff09;系列的最新版本之一。YOLO 系列因其高效和准确性而在计算机视觉领域非常受欢迎&#xff0c;特别是在需要实时目标检测的应用中&#xff0c;如视频监控、自动…

docker搭建mysql集群实现主从复制

前言 随着业务的增长&#xff0c;一台数据服务器已经满足不了需求了&#xff0c;负载过重。这个时候就需要减压了&#xff0c;实现负载均衡和读写分离&#xff0c;一主一丛或一主多从。 主服务器只负责写&#xff0c;而从服务器只负责读&#xff0c;从而提高了效率减轻压力。 …

docker安装nginx支持ssl 实现https访问(完整版)

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 本文简介 2. docker安装nginx支持ssl2.0 准备ssl证书(例: 阿里云)2.0.1 配置域名解析2.0.2 找到数字证书管理服务并签发ssl证书2.0.3 选择默认证书 填写域名 创建2.0.4 提交审核, 签发成功2.0.5 解压并上传到宿主机ssl路径下 …

<网络安全>《83 微课堂<国家数据要素总体框架>》

1 总体框架 国家数据要素化总体框架由“六横两纵”共八个关键环节构成。 2 国家数据基础设施&#xff08;NDI&#xff09; 最底部第一层是国家数据基础设施&#xff08;NDI&#xff09;。国家数据基础设施&#xff08;NDI&#xff09;是经济社会进入数据要素化发展新阶段后新…

Vue面试经验2

Vue 你说你在vue项目中实现了自定义指令&#xff0c;如何实现 全局指令在main.js入口文件中实现 使用方法&#xff1a;v-指令名称 每个钩子函数都有两个参数&#xff08;ele,obj&#xff09; ele:绑定指令的元素 obj:指令的一些信息&#xff08;比如绑定指令的值&#xff0c…

Python Pendulum:用代码提升您的时间管理技能

更多Python学习内容&#xff1a;ipengtao.com Python中的Pendulum库是一个强大的日期和时间处理工具&#xff0c;提供了丰富的功能和灵活的接口&#xff0c;用于处理日期、时间、时区等相关操作。本文将全面介绍Pendulum库的主要功能、使用方法和实际应用场景&#xff0c;并给出…

基于ESP32和ESP8266的物联网开发过程(二)

在做这个项目前&#xff0c;也做了一些调研。项目的初衷是想要用于智能家居。我比较了小米IoT、阿里云、ESPHOME、巴沙云、点灯科技和ONENET等几个平台。最终选择了Onenet&#xff0c;部分原因是之前用过它的多协议版本&#xff0c;但现在这个版本已经下线了。 小米IoT的公测名…