成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

通過實例了解一下小程序中怎么實現canvas拖動功能

本篇文章給大家通過代碼實例來講解一下微信小程序canvas拖動元素功能的實現方法,希望對大家有所幫助!

通過實例了解一下小程序中怎么實現canvas拖動功能

創建畫布

<canvas type="2d" id="myCanvas" style="height: 600px; width: 500px;"></canvas>

data數據

// 鼠標狀態 statusConfig : {       idle: 0,       //正常狀態       Drag_start: 1, //拖拽開始       Dragging: 2,   //拖拽中 }, // canvas 狀態 canvasInfo : {    // 圓的狀態    status: 0,    // 鼠標在在圓圈里位置放里頭    dragTarget: null,    // 點擊圓時的的位置    lastEvtPos: {x: null, y: null}, },

在畫布上畫兩個圓

onLoad: function (options) {     // 設置畫布,獲得畫布的上下文 ctx     this.getCanvas(); }, getCanvas(){     // 根據id獲取canvas元素,微信小程序無法使用document, 我們需要使用wx.createSelectorQuery()來代替     const query = wx.createSelectorQuery()     query.select('#myCanvas')       .fields({ node: true, size: true })       .exec((res) => {         const canvas = res[0].node         // 設置畫布的比例         canvas.width="500";         canvas.height="600";         const ctx = canvas.getContext('2d')         // 在畫布上畫兩個圓,將ctx傳遞過去繪畫         this.drawCircle(ctx, 100, 100, 20);         this.drawCircle(ctx, 200, 200, 10);         // 將我們繪畫的信息保存起來,之后移動后需要清空畫板重新畫         var circles = []         circles.push({x: 100, y: 100, r: 20});         circles.push({x: 200, y: 200, r: 10});         // 不要忘記保存哦         this.setData({          circles         })       })    }, // 畫圓 drawCircle(ctx, cx, cy, r){     ctx.save()     ctx.beginPath()     ctx.strokeStyle = 'yellow'     ctx.lineWidth = 3     ctx.arc(cx, cy, r, 0, 2 * Math.PI)     ctx.stroke()     ctx.closePath()     ctx.restore() },

通過實例了解一下小程序中怎么實現canvas拖動功能

給畫布設3個觸控事件

<canvas type="2d" id="myCanvas"   bindtouchstart="handleCanvasStart"  bindtouchmove="handleCanvasMove"  bindtouchend="handleCanvasEnd"  style="height: 600px; width: 500px;"> </canvas>
類型 觸發條件
touchstart 手指觸摸動作開始
touchmove 手指觸摸后移動
touchcancel 手指觸摸動作被打斷,如來電提醒,彈窗
touchend 手指觸摸動作結束
tap 手指觸摸后馬上離開

觸摸動作開始,若點擊點在圓中,改變canvasInfo中的信息

handleCanvasStart(e){     // 獲取點擊點的位置     const canvasPosition = this.getCanvasPosition(e);     // 判斷點擊點的位置在不在圈里,如果不在返回false, 在返回圓的信息     const circleRef = this.ifInCircle(canvasPosition);     const {canvasInfo, statusConfig} = this.data;     // 在圓里的話,改變圓此時的狀態信息     if(circleRef){       canvasInfo.dragTarget = circleRef;       //改變拖動狀態 idle -> Drag_start       canvasInfo.status = statusConfig.Drag_start;       canvasInfo.lastEvtPos = canvasPosition;     }     this.setData({       canvasInfo     })   }, // 獲取點擊點的位置 getCanvasPosition(e){     return{       x: e.changedTouches[0].x,       y: e.changedTouches[0].y     } },  // 看點擊點擊點是不是在圈里 ifInCircle(pos){     const {circles} = this.data;     for( let i = 0 ; i < circles.length; i++ ){       // 判斷點擊點到圓心是不是小于半徑       if( this.getDistance(circles[i], pos) < circles[i].r ){         return circles[i]       }     }     return false   }, // 獲取兩點之間的距離(數學公式) getDistance(p1, p2){     return Math.sqrt((p1.x-p2.x) ** 2 + (p1.y-p2.y) ** 2) }

手指觸摸后移動 , 重新繪制圓

handleCanvasMove(e){     const canvasPosition = this.getCanvasPosition(e);     const {canvasInfo, statusConfig, circles} = this.data;     // 是拖拽開始狀態,滑動的大小大于5(防抖)     if( canvasInfo.status === statusConfig.Drag_start &&        this.getDistance(canvasPosition, canvasInfo.lastEvtPos) > 5){         // 改變拖動狀態 Drag_start ->  Dragging         canvasInfo.status = statusConfig.Dragging;     }else if( canvasInfo.status === statusConfig.Dragging ){         canvasInfo.dragTarget.x = canvasPosition.x;         canvasInfo.dragTarget.y = canvasPosition.y;         // 重新繪制         const query = wx.createSelectorQuery()         query.select('#myCanvas')           .fields({ node: true, size: true })           .exec((res) => {             const canvas = res[0].node             canvas.width="500";             canvas.height="600";             const ctx = canvas.getContext('2d')             // 遍歷circles,把圓重新畫一遍             circles.forEach(c => this.drawCircle(ctx, c.x, c.y, c.r))           })     }      this.setData({       canvasInfo,     })   }

手指觸摸動作結束 ,改變 canvasInfo在狀態重新變成idle

 handleCanvasEnd(e){     const {canvasInfo, statusConfig} = this.data;     if( canvasInfo.status === statusConfig.Dragging ){     // 改變拖動狀態 Dragging ->  idle       canvasInfo.status = statusConfig.idle;       this.setData({         canvasInfo       })     }   }

通過實例了解一下小程序中怎么實現canvas拖動功能

跟著B站大佬一起學,不過微信小程序和html canvas的差距也已經把我整抑郁了

【相關學習推薦:小程序開發教程】

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
亚洲狠狠婷婷综合久久蜜芽| 吃奶摸下激烈床震视频试看| 综合精品欧美日韩国产在线| 99精品国产再热久久无毒不卡| 亚洲AV无码乱码在线| 亚洲国产精品久久久就秋霞| 玉蒲团Ⅲ艳乳欲仙欲| WYC忘忧草在线看WWW| 国产ZLJZLJZLJZLJ| 狠狠色噜噜狠狠狠777米奇 | 少妇激情AV一区二区三区| 午夜男女无遮挡啪拍视频 | BGMBGMBGM老太太水太多| 大又大又粗又硬又爽少妇毛片| 99RE6在线视频精品免费下载| 被绑在机器上强行高潮H| 国产成人精品午夜福利在线播放 | 国产精品偷窥老熟女高潮| 精品国产福利一区二区| 日本三级黄色视频| 无码人妻一区二区三区密桃手机版 | 可以差差差的视频无掩盖| 人妻激情偷乱频一区二区三区| 理论片午午伦夜理片影院| 日本公与丰满熄的| 天堂久久天堂AV色综合| 亚洲韩国精品无码一区二区| 野花高清在线观看免费3中文| 亚洲精品无码AV人在线观看| AV成人午夜无码一区二区| 国产精品成人久久电影| 久久露脸国产精品| 日韩人妻无码AⅤ中文字幕| 日本SM/羞辱/调教/捆绑视频| 小诗的公交车日记1一15文| 中文天堂网在线最新版| 国产AⅤ夜夜欢一区二区三区| 久久精品国产99精品国产亚洲性 | 亚洲AV综合色区无码二区偷拍| 19岁MACBOOKPRO免费| 2020国产精品久久久久精品| 国产成人久久精品| 麻花传媒CEO免费观看| 丝袜人妻无码中文字幕综合网| 少妇久久久久久被弄高潮| 亚洲乱码一区二三四区AVA | 99精产国品一二三产品| 国产精品一线二线三线| 妺妺坐在我腿上勃起弄了视频| 午夜爽爽爽男女免费观看影院| 重生后我抛弃了负心公主| 精品亚洲国产成人AV制服| 国产精品三级在线观看无码| 久久变态刺激另类SM按摩| 亚洲欧美丝袜 动漫专区| 色欲AV蜜臀AV一区在线| 人妻无码一区二区三区视频 | 资源在线WWW天堂官网| 又硬又粗又长又爽免费看 | 皇帝在御花园进入贵妃的小说| 欧美性爱一区二区三区四区| 亚洲另类欧美综合久久图片区| 东京热无码人妻精品一区二区三区| 久久久久久久极品内射| 国产午夜福利精品久久2021| 麻豆国产丝袜白领秘书在线观看| 丰满少妇女人A毛片视频| 国产9 1在线 | 欧洲| 少妇被躁爽到高潮无码| 国产福利萌白酱精品TV一区| 丰满性熟妇ⅩXXOOOZZX| 国产麻豆精选AV| 帝王怀孕肚腹圆隆憋尿| 粉嫩av一区二区精品爆乳| 麻豆精品一区二区综合AV | 国产精品久久久久久久久岛 | 337P日本欧洲亚洲大胆张筱雨| 黑人刚破完处就三P| 少妇饥渴XXHD麻豆XXHD骆| 99久久久无码国产精品9| 久久精品国产久精国产思思| 无码精品毛片波多野结衣| А√天堂8资源最新版| ZLJZLJZLJ中国人水多多| 精品人妻系列无码人妻在线不| 天天摸天天做天天爽天天弄| SLEEP强弙VIDE○SHO| 蜜臂无码AV在线| 日韩精品无码人成视频手机| 坐着轮流提双腿能起到什么效果| 精品久久亚洲中文字幕| 香港经典A毛片免费观看变态| 第一次接20厘米得黑人活| 欧美黑人性爱视频| 中国新疆XXXXXL19D| 久久精品国产欧美日韩| 亚洲成AV人片在| 91麻豆精品无码一区二区三区| 丰满人妻熟妇乱又伦精品APP| 欧美精产国品一二三类产品特点| 伊人久久大香线蕉午夜| 黑人玩弄漂亮少妇高潮大叫| 夜先锋AV资源网站| 亚洲AVAV电影AV天堂18禁| 国产SM重口调教在线观看| 日本无遮挡吸乳视频| JEALOUSVUE成熟少归| 女人张开腿让男桶喷水高潮| 中国CHINESE壮男GⅤ军警| 久久天堂AV女色优精品| 亚洲无人区码二码三码区别图 | 高中女无套中出17P| 色黄啪啪网18以下勿进| 抽搐一进一出再深一点| 日本护士HD人XXXX| 草草地址线路①屁屁影院成人| 日本XXXXX九色视频在线观看| XXXCHINESE国产HD| 人妻少妇精品久久| 车后车座的疯狂的做的视频| 人人妻人人澡人人爽人人老司机| А√天堂网WWW在线搜索| 人妻互换精品一区二区| 边做饭边被躁BD在线播放| 日本免费精品一区二区三区| 城中村勾搭老熟女啪啪| 又大又粗进出白浆直流视频在线| 中字年轻漂亮的儿媳2| 免费看人妻丰满熟妇AV无码片| 中文在线ずっと好きだった | 在线播放人成视频观看| 蜜臀av一区二区三区人妻| 777米奇色888狠狠俺去啦| 欧美性猛交XXXX免费看蜜桃| 亚洲AV无码一区二区高潮| 国精产品一区一区三区| 亚洲国产精彩中文乱码AV| 久久精品国产色蜜蜜麻豆| 欧美一级 片内射欧美乱强| 一二三四视频社区在线播放中国| 五月激情婷婷丁香综合基地| XXXX性×XX老少配| 蜜臀久久久久精品久久久| 呦交小U女国产精品视频| 久久国产精品久久久久久| 蜜中蜜3在线观看视频| A级毛片免费观看网站| 日本护士毛茸茸高潮| JIZZ成熟丰满韩国女人少妇| 日韩人妻高清精品专区| 国产大学生酒店在线播放| 亚洲AV 无码片一区二区三区| 九九视频免费精品视频| 在线国内永久免费CRM| 欧洲无人区码SUV| 国产SUV精品一区二区四| 亚洲AV无码久久久久久精品同性 | 亚洲国产欧美在线人成AAAA| 久久中文字幕无码一区二区 | 永久免费AV无码网站性色AV| 欧美精品亚洲精品日韩专区VA| 国产一区二三区好的精华液| 亚洲熟妇久久精品| 男男av在线播放| 从今天开始当城主| 亚洲AV蜜乳永久www| CAOPORN免费视频在线| 日韩欧国产精品一区综合无码| 国产剧情MV天美传媒| 艳妇臀荡乳欲伦交换H漫画小说| 妺妺窝人体色聚窝窝| 乖别添了快放进来我想要| 亚洲AV综合AV一区二区综合| 免费无码又爽又刺激高潮的漫画| 又粗又黄又猛又爽大片APP| 人妻丰满熟妇无码区免费| 国产精品日本一区二区不卡视频| 亚洲色成人一区二区三区小说| 欧美日韩在大午夜爽爽影院| 国产精品成人无码免费| 亚洲一线产区二线产区区别在哪里| 欧美一区二区三区性视频野战| 国产精品无码一区二区三区| 一本到在线高清视频| 日韩AV无码中文一区二区三区 | 欧美性BBBBBXXXXX4050免费看| 国产精品国色综合久久| 一边摸一边抽搐一进一出视频| 肉丝超薄少妇一区二区三区| 精品人妻中文AV一区二区三区| JAPANESE人妻中文字幕| 亚洲AⅤ永久无码精品毛片| 你太紧了真舒服小说| 国产精品久久无码一区二区三区网| 又爽又黄又无遮挡的视频在线观看| 日日摸日日碰夜夜爽亚洲| 精品亚洲国产成人AV制服| 成人性生交大片免费看好| 亚洲色噜噜噜噜噜噜国产| 日产精品一二三区|