一、uniapp项目(封装异步请求、moment.js时间处理、封装手势滑动组件、下载图片到本地)

一、封装异步请求:

1. 为什么要封装?

在这里插入图片描述

2. 封装的思路

在这里插入图片描述
在这里插入图片描述

export default (params) => {// 显示加载中uni.showLoading({title: "加载中"})return new Promise((resolve, reject) => {wx.request({...params,success(res) {resolve(res)},fail(err) {reject(err)},complete() {uni.hideLoading()}})})
}

在这里插入图片描述

二、处理时间moment.js

http://momentjs.cn/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、封装手势滑动组件

3.1 实现思路

在这里插入图片描述

3.2 关键代码

在这里插入图片描述

<template><view @touchstart="handleTouchStart"@touchend="handleTouchEnd">学习触屏事件</view>
</template><script>/*1给容器绑定两个触屏事件touchstart和Itouchend2用户按下屏幕事件1记录用户按下屏幕的时间Date.now()时间戳返回1970-1-1到现在的亳秒数2记录用户按下屏幕的坐标x和y3用户离开屏幕事件1记录用户离开屏幕的时间Date.now()2记录用户离开屏幕的坐标×和y3根据两个时间运算判断用户按下屏幕时长是否合法4根据两对坐标判断距离是否合法判断滑动的方向*/export default {data() {return {startTime: 0, // 按下的时间startX: 0, // 按下的坐标startY: 0}},methods: {// 用户按下屏幕handleTouchStart (event) {console.log("handleTouchStart 手指按下屏幕")// console.log("按下" + event.changedTouches[0].clientX)// console.log("按下" + event.changedTouches[0].clientY)this.startTime = Date.now()this.startX = event.changedTouches[0].clientXthis.startY = event.changedTouches[0].clientY},handleTouchEnd (event) {console.log("handleTouchEnd 手指离开屏幕")// console.log("离开" + event.changedTouches[0].clientX)// console.log("离开" + event.changedTouches[0].clientY)const endTime = Date.now()const endX = event.changedTouches[0].clientXconst endY = event.changedTouches[0].clientY// 判断按下的时长if(endTime - this.startTime > 2000) {return;}// 滑动的方向let direction = ""// 判断用户滑动的距离是否合法// 合法再判断滑动的方向if(Math.abs(endX-this.startX) > 10) {// 滑动方向direction = endX - this.startX > 0 ? "right" : "left"} else {return;}// 用户做了合法的滑动操作console.log(direction)}}}
</script><style>view {width: 100%;height: 500rpx;background-color: aqua;}
</style>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.3 实现滑动手势组件 SwiperAction

在这里插入图片描述
swiperAction组件代码:

<template><view><view>swiperAction</view><view@touchstart="handleTouchStart"@touchend="handleTouchEnd"><slot></slot></view></view>
</template><script>/*1给容器绑定两个触屏事件touchstart和Itouchend2用户按下屏幕事件1记录用户按下屏幕的时间Date.now()时间戳返回1970-1-1到现在的亳秒数2记录用户按下屏幕的坐标x和y3用户离开屏幕事件1记录用户离开屏幕的时间Date.now()2记录用户离开屏幕的坐标×和y3根据两个时间运算判断用户按下屏幕时长是否合法4根据两对坐标判断距离是否合法判断滑动的方向*/export default {data() {return {startTime: 0, // 按下的时间startX: 0, // 按下的坐标startY: 0}},methods: {// 用户按下屏幕handleTouchStart (event) {console.log("handleTouchStart 手指按下屏幕")// console.log("按下" + event.changedTouches[0].clientX)// console.log("按下" + event.changedTouches[0].clientY)this.startTime = Date.now()this.startX = event.changedTouches[0].clientXthis.startY = event.changedTouches[0].clientY},handleTouchEnd (event) {console.log("handleTouchEnd 手指离开屏幕")// console.log("离开" + event.changedTouches[0].clientX)// console.log("离开" + event.changedTouches[0].clientY)const endTime = Date.now()const endX = event.changedTouches[0].clientXconst endY = event.changedTouches[0].clientY// 判断按下的时长if(endTime - this.startTime > 2000) {return;}// 滑动的方向let direction = ""// 判断用户滑动的距离是否合法// 合法再判断滑动的方向if(Math.abs(endX-this.startX) > 10) {// 滑动方向direction = endX - this.startX > 0 ? "right" : "left"} else {return;}// 用户做了合法的滑动操作console.log(direction)this.$emit("swiperAction", {direction})}}}
</script><style lang="scss"></style>

在imgDetail页面中使用:
通过改变imgIndex来切换图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

<template><view><!-- 用户信息开始 --><view class="user_info"><view class="user_icon"><image :src="imgDetail.user.avatar" mode="widthFix"></image></view><view class="user_desc"><view class="user_name">{{ imgDetail.user.name }}</view><view class="user_time">{{ imgDetail.cnTime }}</view></view></view><!-- 用户信息结束 --><!-- 高清大图开始 --><view class="high_img"><swiper-action @swiperAction="handleSwiperAcion"><image :src="imgDetail.img" mode="widthFix"></image></swiper-action></view><!-- 高清大图结束 --><!-- 点赞 开始 --><view class="user_rank"><view class="rank"><text class="iconfont icon-dianzan">{{ imgDetail.rank }}</text></view><view class="user_collect"><text class="iconfont icon-shoucang">收藏</text></view></view><!-- 点赞 结束 --><!-- 最新评论 开始 --><view class="comment_hot"><view class="comment_title"><text class="iconfont icon-hot1"></text><text class="comment_text">最新评论</text></view><view class="comment_list"><view class="comment_item" :key="item.id" v-for="item in comment"><!-- 用户信息 --><view class="comment_user"><!-- 用户头像 --><view class="user_icon"><image :src="item.user.avatar" mode="widthFix"></image><!-- 用户名称 --><view class="user_name"><view class="user_nickname">{{item.user.name}}</view><view class="user_time">{{item.cnTime}}</view></view><!-- 用户徽章 --><view class="user_badge"><image v-for="item2 in item.user.title" :key="item2.icon" :src="item2.icon" mode=""></image></view></view></view><!-- 评论数据 --><view class="comment_desc"><view class="comment_content">{{ item.content }}</view><view class="comment_like"><text class="iconfont icon-dianzan">{{ item.size }}</text></view></view></view></view></view><!-- 最新评论 结束 --></view>
</template><script>import moment from "moment"// 设置语言为中文moment.locale("zh-cn")import swiperAction from "@/components/swiperAction.vue"export default {data() {return {// 图片信息对象,包含用户头像imgDetail: {},hot: [], // 热门评论comment: [], //最新评论imgIndex: 0 //高清大图的索引}},components: {swiperAction},onLoad() {console.log(getApp().globalData.imgList)const {imgList,imgIndex} = getApp().globalDatathis.imgIndex = imgIndex// this.imgDetail = imgList[this.imgIndex]// // xxx 年前// this.imgDetail.cnTime = moment(this.imgDetail.atime * 1000).fromNow()// // 获取图片详情的id// // this.imgDetail.id// this.getComments(this.imgDetail.id)this.getData()},methods: {getComments(id) {this.request({url: `http://157.122.54.189:9088/image/v2/wallpaper/wallpaper/${id}/comment`}).then((res) => {console.log(res)this.hot = res.data.res.hotthis.comment = res.data.res.commentres.data.res.comment.forEach(v => {v.cnTime = moment(v.atime*1000).fromNow()})})},getData() {const {imgList} = getApp().globalDatathis.imgDetail = imgList[this.imgIndex]// xxx 年前this.imgDetail.cnTime = moment(this.imgDetail.atime * 1000).fromNow()// 获取图片详情的id// this.imgDetail.idthis.getComments(this.imgDetail.id)},// 自定义的组件的滑动事件handleSwiperAcion (e) {console.log(e)/* 1. 用户左滑, index++2. 用户右滑  index--3. 判断数组是否越界的问题*/const {imgList} = getApp().globalDataif (e.direction === "left" && this.imgIndex < imgList.length-1) {// 可以进行 左滑 ,加载下一张图片this.imgIndex++this.getData()} else if (e.direction === "right" && this.imgIndex > 0) {// 可以进行 右滑 ,加载上一张图片this.imgIndex--this.getData()} else {uni.showToast({title: "没有数据啦",icon: "none"})}}}}
</script><style lang="scss" scoped>.user_info {display: flex;align-items: center;padding: 20rpx;.user_icon {padding: 0 20rpx;image {width: 88rpx;border-radius: 50%;}}.user_desc {.user_name {color: #000000;font-weight: 600;}.user_time {color: #CCCCCC;font-size: 24rpx;padding: 10rpx 0;}}}.user_rank {display: flex;height: 80rpx;border-bottom: 5rpx solid #EEEEEE;.rank {display: flex;justify-content: center;align-items: center;flex: 1;.iconfont {}}.user_collect {display: flex;justify-content: center;align-items: center;flex: 1;.iconfont {}}}.comment_hot {.comment_title {padding: 15rpx;.iconfont {color: red;font-size: 40rpx;}.comment_text {font-weight: 600;font-size: 28rpx;color: #666666;margin-left: 10rpx;}}.comment_list {.comment_item {border-bottom: 15rpx solid #EEEEEE;// 用户信息.comment_user {display: flex;padding: 20rpx 10rpx;.user_icon {display: flex;width: 35%;justify-content: center;align-items: center;image {border-radius: 50%;width: 40%;height: 90%;}}.user_name {flex: 1;margin-left: 10rpx;.user_nickname {color: #777;}.user_time {color: #ccc;font-size: 24rpx;padding: 5rpx;}}.user_badge {image {width: 40rpx;height: 40rpx;}}}// 评论数据.comment_desc {display: flex;padding: 10rpx 0;.comment_content {flex: 1;padding-left: 15%;color: #000000;}.comment_like {text-align: right;margin-right: 15rpx;.icon-dianzan {}}}}}}
</style>

四、实现下载图片到本地功能

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

.net中如何发送HTTP请求网络资源

应用场景 应该说只要是需要通过发送Http请求获取网络资源的地方都要使用它&#xff0c;网络资源可以是指以URI来表示的资源&#xff0c;比如web api接口等。 HttpWebRequest .net2.0 ~ .net4.0使用HttpWebRequest 代码如下&#xff1a; 1 //.net2.0 ~ .net4.0使用HttpWebReque…

二、uniapp项目(分段器的使用、scroll-view、视频下载、转发)

一、分段器组件的使用 uniapp官方文档 <template><view class"category"><view class"category_tab"> <view class"category_tab_title"><view class"title_inner"><uni-segmented-control :curr…

problem b: 一年中的第几天_第九届蓝桥杯B组试题

1.标题&#xff1a;第几天2000年的1月1日&#xff0c;是那一年的第1天。那么&#xff0c;2000年的5月4日&#xff0c;是那一年的第几天&#xff1f;注意&#xff1a;需要提交的是一个整数&#xff0c;不要填写任何多余内容。“手动分割”大小月判断&#xff1a;https://jingyan…

一、express 路由 todos案例

一、express路由 动态路由参数 params 路径参数 query 二、 todos案例 2.1 准备工作 新建一个文件夹01-demo执行npm init -y 生成package.json配置文件执行npm install express --save 安装express新建app.js文件&#xff0c;这是程序的入口文件新建db.json文件&#xff0…

二、express中间件

一、中间件引入 实现加入日志模块功能&#xff1a; 1. 我们能想到的方案&#xff1a; 将日志输出代码封装到函数中&#xff0c;然后需要日志输出的地方调用这个函数即可。 app.js文件&#xff1a; const express require(express)const app express()const myLogger (r…

三、Express 路由

一、路由 路由是指应用程序的端点(URI)如何响应客户端请求. 你可以使用app与HTTP方法相对应的Express对象的方法来定义路由. 例如,app.get()处理GET请求和app.post POST 请求。 你还可以使用app.all()处理所有HTTP方法,并使用app.use()将中间件指定为回调函数. 这些路由方法…

RESTful 接口设计规范

一、RESTful 接口设计规范 1. 协议 API与用户的通信协议&#xff0c;尽量使用HTTPs协议。 2. 域名 应该尽量将API部署在专用域名之下。 https://api.example.com 如果确定API很简单&#xff0c;不会有进一步扩展&#xff0c;可以考虑放在主域名下。 https://example.org/ap…

是引进外部函数吗_使用PowerBI的这两个函数,灵活计算各种占比

计算个体占总体的比例是一个很常见的分析方式&#xff0c;它很简单&#xff0c;就是两个数字相除&#xff0c;但是当需要计算的维度、总体的范围发生动态变化时&#xff0c;如何灵活且快速的计算出各种占比&#xff0c;还是需要动一点心思的。本文就通过 DAX 中的 ALL 和 ALLSE…

WCF入门(五)---创建WCF服务

使用Microsoft Visual Studio2012创建WCF服务&#xff0c;理解如下所有必要的编码&#xff0c;更好地创建WCF服务的概念&#xff0c;这里做一个简单的任务。 启动Visual Studio 2012。 单击新建项目&#xff0c;然后在Visual C&#xff03;标签&#xff0c;选择WCF选项。 WCF服…

Express接口综合案例(创建项目、配置常用中间件、路由设计、提取控制器模块、配置错误统一处理中间件、用户注册的数据验证,密码加密)

一、创建项目 二、目录结构 三、配置常用中间件 3.1 解析请求体 express.json&#xff08;&#xff09;express.urlencoded&#xff08;&#xff09; 3.2 日志输出 morgan&#xff08;&#xff09; 3.3 为客户端提供跨域资源请求 cors&#xff08;&#xff09; 四、路…

二进制包如何知道go 版本_gops 是怎么和 Go 的运行时进行交互的?

本文基于 Go 1.13 和 gops 0.3.7.gops 旨在帮助开发人员诊断 Go 流程并与之交互。它提供了跟踪运行中的程序几秒钟的功能&#xff0c;可以通过获取 CPU 配置文件 pprof&#xff0c;甚至可以直接与垃圾收集器进行交互。发现gops 提供发现服务&#xff0c;该服务能够列出计算机上…

基于JWT的身份认证学习笔记

JSON Web Token&#xff08;缩写JWT&#xff09;是目前最流行的跨域认证解决方案。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后&#xff0c;在当前对话&#xff08;session&#xff09;里面保…

ssh 端口_【科普】SSH都不懂,还搞什么网络

今天小编为大家分享一篇关于SSH 的介绍和使用方法的文章。本文从SSH是什么出发&#xff0c;讲述了SSH的基本用法&#xff0c;之后在远程登录、端口转发等多种场景下进行独立的讲述&#xff0c;希望能对大家有所帮助。1. 什么是SSH&#xff1f;SSH是一种网络协议&#xff0c;用于…

二维码扫描和应用跳转

转载自&#xff1a; http://sindrilin.com/ios-dev/2015/11/01/二维码扫描和应用跳转.html 前面我们已经调到过怎么制作二维码&#xff0c;在我们能够生成二维码之后&#xff0c;如何对二维码进行扫描呢&#xff1f; 在iOS7之前&#xff0c;大部分应用中使用的二维码扫描是第三…

oracle 锁表如何解决_Java高并发解决什么方式

对于我们开发的网站&#xff0c;如果网站的访问量非常大的话&#xff0c;那么我们就需要考虑相关的并发访问问题了。而并发问题是绝大部分的程序员头疼的问题&#xff0c;但话又说回来了&#xff0c;既然逃避不掉&#xff0c;那我们就坦然面对吧~今天就让我们一起来研究一下常见…

Express接口案例 使用jsonwebtoken

一、jsonwebtoken的使用 jsonwebtoken官方文档 const jwt require(jsonwebtoken) // 以同步的方式&#xff0c;生成jwt // const token jwt.sign({ // foo: bar // }, zepzepep)// 以异步的方式&#xff0c;生成jwt const token jwt.sign({foo: bar }, zepzepep, (err, …

php 日期转毫秒_【小技巧】 各种日期操作方法汇总

虽然现在处理日期方面已经有了很成熟的也很好用的库&#xff0c;例如(momentjs和date-fns)&#xff0c;但是在实际开发中&#xff0c;我们有时候可能并不需要整个库。所以我就在下面整理了在前端开发时对日期时间的各种操作&#xff0c;也算是比较全的了。其中一部分来自自己&a…

Express接口案例——完成文章增删改查接口

一、创建文章的Model var mongoose require(mongoose) const baseModel require(./base-model.js) const Schema mongoose.Schemaconst articleSchema new mongoose.Schema({title: {type: String,required: true},description: {type: String,required: true},// 文章内容…

Express接口案例——完成文章评论相关的接口

一、评论的Model {"comment": {"id": 1,"createdAt": "2016-02-18T03:22:56.637Z","updatedAt": "2016-02-18T03:22:56.637Z","body": "It takes a Jacobian","author": {"us…

通过set方式注入的bean为null_Spring 注入集合

注入集合你已经看到了如何使用 value 属性来配置基本数据类型和在你的 bean 配置文件中使用标签的 ref属性来配置对象引用。这两种情况下处理奇异值传递给一个 bean。现在如果你想传递多个值&#xff0c;如 Java Collection 类型 List、Set、Map 和 Properties&#xff0c;应该…