国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
建立畫(huà)布
#給畫(huà)佈設(shè)3個(gè)觸控事件
首頁(yè) 微信小程式 小程式開(kāi)發(fā) 透過(guò)實(shí)例了解小程式中怎麼實(shí)作canvas拖曳功能

透過(guò)實(shí)例了解小程式中怎麼實(shí)作canvas拖曳功能

Nov 29, 2021 pm 07:23 PM
canvas 小程式 拖曳

這篇文章給大家透過(guò)程式碼實(shí)例來(lái)講解一下微信小程式canvas拖曳元素功能的實(shí)作方法,希望對(duì)大家有幫助!

透過(guò)實(shí)例了解小程式中怎麼實(shí)作canvas拖曳功能

建立畫(huà)布

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

data資料

// 鼠標(biāo)狀態(tài)
statusConfig : {
      idle: 0,       //正常狀態(tài)
      Drag_start: 1, //拖拽開(kāi)始
      Dragging: 2,   //拖拽中
},
// canvas 狀態(tài)
canvasInfo : {
   // 圓的狀態(tài)
   status: 0,
   // 鼠標(biāo)在在圓圈里位置放里頭
   dragTarget: null,
   // 點(diǎn)擊圓時(shí)的的位置
   lastEvtPos: {x: null, y: null},
},

在畫(huà)布上畫(huà)兩個(gè)圓

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

透過(guò)實(shí)例了解小程式中怎麼實(shí)作canvas拖曳功能

#給畫(huà)佈設(shè)3個(gè)觸控事件

<canvas type="2d" id="myCanvas" 
 bindtouchstart="handleCanvasStart"  bindtouchmove="handleCanvasMove"  bindtouchend="handleCanvasEnd"
 style="height: 600px; width: 500px;">
</canvas>
##手指觸摸動(dòng)作結(jié)束tap手指觸摸後馬上離開(kāi)
#類型觸發(fā)條件
touchstart手指觸摸動(dòng)作開(kāi)始
touchmove#手指觸摸後移動(dòng)
touchcancel手指觸摸動(dòng)作被打斷,如來(lái)電提醒,彈出窗口
touchend
#觸摸動(dòng)作開(kāi)始,若點(diǎn)擊點(diǎn)在圓中,改變canvasInfo中的訊息

handleCanvasStart(e){
    // 獲取點(diǎn)擊點(diǎn)的位置
    const canvasPosition = this.getCanvasPosition(e);
    // 判斷點(diǎn)擊點(diǎn)的位置在不在圈里,如果不在返回false, 在返回圓的信息
    const circleRef = this.ifInCircle(canvasPosition);
    const {canvasInfo, statusConfig} = this.data;
    // 在圓里的話,改變圓此時(shí)的狀態(tài)信息
    if(circleRef){
      canvasInfo.dragTarget = circleRef;
      //改變拖動(dòng)狀態(tài) idle -> Drag_start
      canvasInfo.status = statusConfig.Drag_start;
      canvasInfo.lastEvtPos = canvasPosition;
    }
    this.setData({
      canvasInfo
    })
  },
// 獲取點(diǎn)擊點(diǎn)的位置
getCanvasPosition(e){
    return{
      x: e.changedTouches[0].x,
      y: e.changedTouches[0].y
    }
},

// 看點(diǎn)擊點(diǎn)擊點(diǎn)是不是在圈里
ifInCircle(pos){
    const {circles} = this.data;
    for( let i = 0 ; i < circles.length; i++ ){
      // 判斷點(diǎn)擊點(diǎn)到圓心是不是小于半徑
      if( this.getDistance(circles[i], pos) < circles[i].r ){
        return circles[i]
      }
    }
    return false
  },
// 獲取兩點(diǎn)之間的距離(數(shù)學(xué)公式)
getDistance(p1, p2){
    return Math.sqrt((p1.x-p2.x) ** 2 + (p1.y-p2.y) ** 2)
}

手指觸摸後移動(dòng), 重新繪製圓形

handleCanvasMove(e){
    const canvasPosition = this.getCanvasPosition(e);
    const {canvasInfo, statusConfig, circles} = this.data;
    // 是拖拽開(kāi)始狀態(tài),滑動(dòng)的大小大于5(防抖)
    if( canvasInfo.status === statusConfig.Drag_start && 
      this.getDistance(canvasPosition, canvasInfo.lastEvtPos) > 5){
        // 改變拖動(dòng)狀態(tài) 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(&#39;#myCanvas&#39;)
          .fields({ node: true, size: true })
          .exec((res) => {
            const canvas = res[0].node
            canvas.width="500";
            canvas.height="600";
            const ctx = canvas.getContext(&#39;2d&#39;)
            // 遍歷circles,把圓重新畫(huà)一遍
            circles.forEach(c => this.drawCircle(ctx, c.x, c.y, c.r))
          })
    }

    this.setData({
      canvasInfo,
    })
  }

手指觸摸動(dòng)作結(jié)束,改變canvasInfo在狀態(tài)重新變成idle

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

透過(guò)實(shí)例了解小程式中怎麼實(shí)作canvas拖曳功能

#跟著B(niǎo)站大佬一起學(xué),不過(guò)微信小程式和html canvas的差距也已經(jīng)把我整憂鬱了

【相關(guān)學(xué)習(xí)推薦:

小程式開(kāi)發(fā)教學(xué)

以上是透過(guò)實(shí)例了解小程式中怎麼實(shí)作canvas拖曳功能的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

Laravel 教程
1601
29
PHP教程
1502
276
實(shí)作微信小程式中的卡片翻轉(zhuǎn)特效 實(shí)作微信小程式中的卡片翻轉(zhuǎn)特效 Nov 21, 2023 am 10:55 AM

實(shí)作微信小程式中的卡片翻轉(zhuǎn)特效在微信小程式中,實(shí)現(xiàn)卡片翻轉(zhuǎn)特效是一種常見(jiàn)的動(dòng)畫(huà)效果,可以提升使用者體驗(yàn)和介面互動(dòng)的吸引力。以下將具體介紹如何在微信小程式中實(shí)現(xiàn)卡片翻轉(zhuǎn)的特效,並提供相關(guān)程式碼範(fàn)例。首先,需要在小程式的頁(yè)面佈局檔案中定義兩個(gè)卡片元素,一個(gè)用於顯示正面內(nèi)容,一個(gè)用於顯示背面內(nèi)容,具體範(fàn)例程式碼如下:&lt;!--index.wxml--&gt;&l

支付寶上線「漢字拾光-生僻字」小程序,用於徵集、補(bǔ)充生僻字庫(kù) 支付寶上線「漢字拾光-生僻字」小程序,用於徵集、補(bǔ)充生僻字庫(kù) Oct 31, 2023 pm 09:25 PM

本站10月31日消息,今年5月27日,螞蟻集團(tuán)宣布啟動(dòng)“漢字拾光計(jì)劃”,最近又迎來(lái)新進(jìn)展:支付寶上線“漢字拾光-生僻字”小程序,用於向社會(huì)徵集生僻字,補(bǔ)充生僻字庫(kù),同時(shí)提供不同的生僻字輸入體驗(yàn),以幫助完善支付寶內(nèi)的生僻字輸入方法。目前,用戶搜尋「漢字拾光」、「生僻字」等關(guān)鍵字就可以進(jìn)入「生僻字」小程式。在小程式裡,使用者可以提交尚未被系統(tǒng)辨識(shí)輸入的生僻字圖片,支付寶工程師確認(rèn)後,將會(huì)對(duì)字庫(kù)進(jìn)行補(bǔ)錄入。本站注意到,使用者也可以在小程式體驗(yàn)最新的拆字輸入法,這項(xiàng)輸入法針對(duì)讀音不明確的生僻字設(shè)計(jì)。用戶拆

uniapp如何實(shí)現(xiàn)小程式和H5的快速轉(zhuǎn)換 uniapp如何實(shí)現(xiàn)小程式和H5的快速轉(zhuǎn)換 Oct 20, 2023 pm 02:12 PM

uniapp如何實(shí)現(xiàn)小程式和H5的快速轉(zhuǎn)換,需要具體程式碼範(fàn)例近年來(lái),隨著行動(dòng)網(wǎng)路的發(fā)展和智慧型手機(jī)的普及,小程式和H5成為了不可或缺的應(yīng)用形式。而uniapp作為一個(gè)跨平臺(tái)的開(kāi)發(fā)框架,可以在一套程式碼的基礎(chǔ)上,快速實(shí)現(xiàn)小程式和H5的轉(zhuǎn)換,大大提高了開(kāi)發(fā)效率。本文將介紹uniapp如何實(shí)現(xiàn)小程式和H5的快速轉(zhuǎn)換,並給出具體的程式碼範(fàn)例。一、uniapp簡(jiǎn)介unia

uniapp實(shí)現(xiàn)如何使用canvas繪製圖表和動(dòng)畫(huà)效果 uniapp實(shí)現(xiàn)如何使用canvas繪製圖表和動(dòng)畫(huà)效果 Oct 18, 2023 am 10:42 AM

uniapp實(shí)現(xiàn)如何使用canvas繪製圖表和動(dòng)畫(huà)效果,需要具體程式碼範(fàn)例一、引言隨著行動(dòng)裝置的普及,越來(lái)越多的應(yīng)用程式需要在行動(dòng)裝置上展示各種圖表和動(dòng)畫(huà)效果。而uniapp作為一款基於Vue.js的跨平臺(tái)開(kāi)發(fā)框架,提供了使用canvas繪製圖表和動(dòng)畫(huà)效果的能力。本文將介紹uniapp如何使用canvas來(lái)實(shí)現(xiàn)圖表和動(dòng)畫(huà)效果,並給出具體的程式碼範(fàn)例。二、canvas

學(xué)習(xí)canvas框架 詳解常用的canvas框架 學(xué)習(xí)canvas框架 詳解常用的canvas框架 Jan 17, 2024 am 11:03 AM

探索Canvas框架:了解常用的Canvas框架有哪些,需要具體程式碼範(fàn)例引言:Canvas是HTML5中提供的一個(gè)繪圖API,透過(guò)它我們可以實(shí)現(xiàn)豐富的圖形和動(dòng)畫(huà)效果。為了提高繪圖的效率和便利性,許多開(kāi)發(fā)者開(kāi)發(fā)了不同的Canvas框架。本文將介紹一些常用的Canvas框架,並提供具體程式碼範(fàn)例,以幫助讀者更深入地了解這些框架的使用方法。一、EaselJS框架Ea

探索canvas在遊戲開(kāi)發(fā)中的強(qiáng)大作用及應(yīng)用 探索canvas在遊戲開(kāi)發(fā)中的強(qiáng)大作用及應(yīng)用 Jan 17, 2024 am 11:00 AM

了解canvas在遊戲開(kāi)發(fā)中的威力與應(yīng)用概述:隨著網(wǎng)路科技的快速發(fā)展,網(wǎng)頁(yè)遊戲越來(lái)越受到廣大玩家的喜愛(ài)。而作為網(wǎng)頁(yè)遊戲開(kāi)發(fā)中重要的一環(huán),canvas技術(shù)在遊戲開(kāi)發(fā)中逐漸嶄露頭角,展現(xiàn)出強(qiáng)大的威力與應(yīng)用。本文將介紹canvas在遊戲開(kāi)發(fā)中的潛力,並透過(guò)具體的程式碼範(fàn)例來(lái)展示其應(yīng)用。一、canvas技術(shù)簡(jiǎn)介canvas是HTML5中新增的元素,它允許我們使用

JavaScript 如何實(shí)現(xiàn)圖片的左右拖曳切換效果? JavaScript 如何實(shí)現(xiàn)圖片的左右拖曳切換效果? Oct 21, 2023 am 09:27 AM

JavaScript如何實(shí)現(xiàn)圖片的左右拖曳切換效果?在現(xiàn)代網(wǎng)頁(yè)設(shè)計(jì)中,動(dòng)態(tài)效果可以增加使用者體驗(yàn)和視覺(jué)吸引力。而圖片的左右拖曳切換效果是一種常見(jiàn)的動(dòng)態(tài)效果,它可以讓使用者透過(guò)拖曳圖片來(lái)切換不同的內(nèi)容。在本文中,我們將介紹如何使用JavaScript來(lái)實(shí)現(xiàn)這種圖片切換效果,並提供具體的程式碼範(fàn)例。首先,我們需要準(zhǔn)備一些HTML和CSS程式碼,用於建立一個(gè)包含多個(gè)圖片

微信小程式怎麼弄會(huì)員 微信小程式怎麼弄會(huì)員 May 07, 2024 am 10:24 AM

1.開(kāi)啟微信小程序,進(jìn)入對(duì)應(yīng)的小程式頁(yè)面。 2.在小程式頁(yè)面中尋找會(huì)員相關(guān)入口,通常會(huì)員入口在底部導(dǎo)覽列或個(gè)人中心等位置。 3.點(diǎn)選會(huì)員入口,進(jìn)入會(huì)員申請(qǐng)頁(yè)。 4、在會(huì)員申請(qǐng)頁(yè)面,填寫(xiě)相關(guān)信息,如手機(jī)號(hào)碼、姓名等,完成資料填寫(xiě)後,提交申請(qǐng)。 5.小程式方會(huì)對(duì)會(huì)員申請(qǐng)審核,審核通過(guò)後,用戶即可成為微信小程式會(huì)員。 6.作為會(huì)員,用戶將享有更多的會(huì)員權(quán)益,如積分、優(yōu)惠券、會(huì)員專屬活動(dòng)等

See all articles