日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一、uniapp项目(封装异步请求、moment.js时间处理、封装手势滑动组件、下载图片到本地) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、封裝異步請(qǐng)求:

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()}})}) }

二、處理時(shí)間moment.js

http://momentjs.cn/



三、封裝手勢(shì)滑動(dòng)組件

3.1 實(shí)現(xiàn)思路

3.2 關(guān)鍵代碼

<template><view @touchstart="handleTouchStart"@touchend="handleTouchEnd">學(xué)習(xí)觸屏事件</view> </template><script>/*1給容器綁定兩個(gè)觸屏事件touchstart和Itouchend2用戶按下屏幕事件1記錄用戶按下屏幕的時(shí)間Date.now()時(shí)間戳返回1970-1-1到現(xiàn)在的亳秒數(shù)2記錄用戶按下屏幕的坐標(biāo)x和y3用戶離開屏幕事件1記錄用戶離開屏幕的時(shí)間Date.now()2記錄用戶離開屏幕的坐標(biāo)×和y3根據(jù)兩個(gè)時(shí)間運(yùn)算判斷用戶按下屏幕時(shí)長(zhǎng)是否合法4根據(jù)兩對(duì)坐標(biāo)判斷距離是否合法判斷滑動(dòng)的方向*/export default {data() {return {startTime: 0, // 按下的時(shí)間startX: 0, // 按下的坐標(biāo)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// 判斷按下的時(shí)長(zhǎng)if(endTime - this.startTime > 2000) {return;}// 滑動(dòng)的方向let direction = ""// 判斷用戶滑動(dòng)的距離是否合法// 合法再判斷滑動(dòng)的方向if(Math.abs(endX-this.startX) > 10) {// 滑動(dòng)方向direction = endX - this.startX > 0 ? "right" : "left"} else {return;}// 用戶做了合法的滑動(dòng)操作console.log(direction)}}} </script><style>view {width: 100%;height: 500rpx;background-color: aqua;} </style>


3.3 實(shí)現(xiàn)滑動(dòng)手勢(shì)組件 SwiperAction


swiperAction組件代碼:

<template><view><view>swiperAction</view><view@touchstart="handleTouchStart"@touchend="handleTouchEnd"><slot></slot></view></view> </template><script>/*1給容器綁定兩個(gè)觸屏事件touchstart和Itouchend2用戶按下屏幕事件1記錄用戶按下屏幕的時(shí)間Date.now()時(shí)間戳返回1970-1-1到現(xiàn)在的亳秒數(shù)2記錄用戶按下屏幕的坐標(biāo)x和y3用戶離開屏幕事件1記錄用戶離開屏幕的時(shí)間Date.now()2記錄用戶離開屏幕的坐標(biāo)×和y3根據(jù)兩個(gè)時(shí)間運(yùn)算判斷用戶按下屏幕時(shí)長(zhǎng)是否合法4根據(jù)兩對(duì)坐標(biāo)判斷距離是否合法判斷滑動(dòng)的方向*/export default {data() {return {startTime: 0, // 按下的時(shí)間startX: 0, // 按下的坐標(biāo)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// 判斷按下的時(shí)長(zhǎng)if(endTime - this.startTime > 2000) {return;}// 滑動(dòng)的方向let direction = ""// 判斷用戶滑動(dòng)的距離是否合法// 合法再判斷滑動(dòng)的方向if(Math.abs(endX-this.startX) > 10) {// 滑動(dòng)方向direction = endX - this.startX > 0 ? "right" : "left"} else {return;}// 用戶做了合法的滑動(dòng)操作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><!-- 用戶信息結(jié)束 --><!-- 高清大圖開始 --><view class="high_img"><swiper-action @swiperAction="handleSwiperAcion"><image :src="imgDetail.img" mode="widthFix"></image></swiper-action></view><!-- 高清大圖結(jié)束 --><!-- 點(diǎn)贊 開始 --><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><!-- 點(diǎn)贊 結(jié)束 --><!-- 最新評(píng)論 開始 --><view class="comment_hot"><view class="comment_title"><text class="iconfont icon-hot1"></text><text class="comment_text">最新評(píng)論</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><!-- 評(píng)論數(shù)據(jù) --><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><!-- 最新評(píng)論 結(jié)束 --></view> </template><script>import moment from "moment"// 設(shè)置語言為中文moment.locale("zh-cn")import swiperAction from "@/components/swiperAction.vue"export default {data() {return {// 圖片信息對(duì)象,包含用戶頭像imgDetail: {},hot: [], // 熱門評(píng)論comment: [], //最新評(píng)論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)},// 自定義的組件的滑動(dòng)事件handleSwiperAcion (e) {console.log(e)/* 1. 用戶左滑, index++2. 用戶右滑 index--3. 判斷數(shù)組是否越界的問題*/const {imgList} = getApp().globalDataif (e.direction === "left" && this.imgIndex < imgList.length-1) {// 可以進(jìn)行 左滑 ,加載下一張圖片this.imgIndex++this.getData()} else if (e.direction === "right" && this.imgIndex > 0) {// 可以進(jìn)行 右滑 ,加載上一張圖片this.imgIndex--this.getData()} else {uni.showToast({title: "沒有數(shù)據(jù)啦",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;}}}// 評(píng)論數(shù)據(jù).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>

四、實(shí)現(xiàn)下載圖片到本地功能





總結(jié)

以上是生活随笔為你收集整理的一、uniapp项目(封装异步请求、moment.js时间处理、封装手势滑动组件、下载图片到本地)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕视频 | 少妇激情一区二区三区 | 天天想你免费观看完整版高清电影 | 五月婷婷六月天 | 国产午夜手机精彩视频 | 国产一道本 | 国产主播福利在线 | 日批免费网站 | 伊人精品影院 | 一区二区久久久 | 日韩欧美在线观看免费 | 精品不卡一区二区三区 | 99国产热| 国产一级做a爰片久久毛片男男 | 久久九九国产视频 | a级一片 | 美女网站免费黄 | 亚欧在线观看 | 日本三级日本三级日本三级极 | 日韩视频免费观看高清 | 成人免费高清视频 | 亚洲最大的黄色网 | 国产色播av在线 | 日韩在线精品视频 | 好看的中文字幕电影 | 香蕉爱爱视频 | 天天综合网入口 | 1515hh成人免费看 | 淫欲少妇 | 99re5| 国产怡红院 | 91黄色短视频| 五月天激情开心网 | 邪恶久久 | 日韩www视频 | 极品美女高潮出白浆 | av图区 | 九九少妇| 久久青青草原亚洲av无码麻豆 | 不卡一区二区三区四区 | 国产日批视频在线观看 | 亚洲精品偷拍视频 | 清冷男神被c的合不拢腿男男 | 伊人网综合视频 | 苍井空张开腿实干12次 | 五月激情小说网 | 色性网 | 中文字幕第一页在线 | 国产亚洲在线观看 | 日本一本一道 | 91丨国产| 国产一级二级在线 | yw视频在线观看 | 男生舔女生胸 | 瑟瑟网站免费 | 日韩免费淫片 | 潘金莲一级淫片aaaaa | 狠狠操狠狠操 | 美女黄站| 女人张开腿让男人桶爽 | 亚洲欧美中文日韩在线 | 欧美日韩免费一区二区 | 国产精品免费观看视频 | 日韩成人在线看 | 精品一区二区三区精华液 | 欧美在线观看一区二区三区 | 中文字幕精品视频 | 国产网站免费在线观看 | 久久久久一区二区 | 亚洲精品成人在线视频 | 亚洲人一区二区三区 | 激情九九 | 亚洲中文字幕第一区 | 欧美女优在线观看 | 精品人妻一区二区色欲产成人 | 日韩av无码一区二区三区 | 日本成人三级 | 黄色网页在线播放 | 国产片久久 | 伊人影视大全 | 日韩国产欧美一区二区三区 | 日本视频在线观看 | eeuss一区二区 | 亚洲少妇18p| 亚洲双插 | 国模无码一区二区三区 | 91最新在线视频 | 91在线精品秘密一区二区 | 中国黄色一级片 | 久久久久亚洲AV成人网人人小说 | 日韩在线看片 | 中文字幕国产一区 | 麻豆影视在线免费观看 | 青青伊人影院 | 亚洲欧美变态另类丝袜第一区 | 涩涩视频免费在线观看 | 亚洲熟女综合一区二区三区 | xxxxxx日本| 开心色站 |