日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美女午夜视频 | 好看的中文字幕av | 好男人资源 | 成人69视频 | 亚洲影视精品 | 久久伊人成人 | 欧美精品播放 | 久久婷婷国产麻豆91 | 伊人操| 在线观看免费成人 | www久久久 | 狠狠干2017 | 色七七网站 | www.av视频在线观看 | 在线中文字幕一区二区 | 成人性生交大片免费看中文 | 久久无码人妻精品一区二区三区 | 一区二区三区日韩精品 | 毛片在线免费观看网址 | 一级a性色生活片久久毛片 爱爱高潮视频 | 一区二区三区免费看视频 | 亚洲第一色站 | 噜噜噜亚洲色成人网站 | 色欲久久久天天天综合网精品 | 特级淫片aaaaaaa级 | 久久三级精品 | 男人天堂综合 | 无遮挡又爽又刺激的视频 | 小早川怜子久久精品中文字幕 | 国产又粗又黄视频 | 亚洲一区二区日本 | 丰满大肥婆肥奶大屁股 | 午夜a区| 国产精品波多野结衣 | www.youjizz.com视频 | 亚洲无码精品在线播放 | 人妖粗暴刺激videos呻吟 | 男人天堂成人网 | 日韩精品美女 | 国产乱子伦精品 | 日本爽妇网 | 午夜不卡在线 | 国产一区亚洲二区 | 日产电影一区二区三区 | 2018天天干天天操 | 色妞视频| 亚洲国产天堂 | 亚洲а∨天堂久久精品2021 | 日本免费黄色网 | 玉女心经是什么意思 | 国产精品黄色在线观看 | 亚洲黄色免费看 | 99热这里只有精品久久 | 可以免费看av的网站 | 蜜臀久久99精品久久一区二区 | 狼人香蕉 | 夫の上司に犯波多野结衣853 | 亚洲人成亚洲人成在线观看 | 色偷av | 日日插夜夜爽 | 免费看黄色片网站 | 综合伊人久久 | 亚洲片国产一区一级在线观看 | 欧美深性狂猛ⅹxxx深喉 | 中文字幕二 | 手机看黄色| 九九九色 | www.jizzcom| 97视频免费| 久久精品专区 | 国产又黄又大又粗视频 | 天天天天躁天天爱天天碰2018 | 香蕉成视频人app下载安装 | 天天色天天看 | 蜜桃久久久久久 | 久久久久久久久久一级 | 久久五月网 | 亚洲精品视频一区 | 成人黄色小视频 | 久久国产视频网 | 五月天在线观看 | 日韩一级黄色 | 天堂最新资源在线 | 国产传媒视频在线观看 | 日本人性爱视频 | 日本一区二区在线看 | 91毛片在线观看 | 精品久久一二三区 | 青娱乐国产盛宴 | 日本久久久久久久久 | 拔萝卜91| 亚洲女同女同女同女同女同69 | 日韩色图在线观看 | 亚洲一区电影 | 黄色片视频播放 | 91视频黄| 国产无套粉嫩白浆内谢 | 韩国美女毛片 | 国产精品永久免费 |