Vue和uniapp中該如何使用canvas詳解
Vue與uniapp中如何使用canvas?
一般Vue情況下我們使用canvas是這樣使用的
//創(chuàng)建canvas元素 <canvas id="output_mini" width="1400" height="790" style="display: block;position: absolute;top:0;" /> //找到canvas元素 const canvas = document.getElementById("output_mini"); //創(chuàng)建context對(duì)象 this.context = canvas.getContext("2d"); //然后畫線段畫圓等操作 ctx.moveTo(0,0); //定義開(kāi)始坐標(biāo)(0,0) ctx.lineTo(200,100); //結(jié)束坐標(biāo) (200,100) ctx.stroke(); // stroke() 方法來(lái)繪制線條:
但是在uniapp中,不能像上面這樣直接創(chuàng)建context對(duì)象。需要通過(guò)uniapp官方提供的方法來(lái)創(chuàng)建context對(duì)象,之后在進(jìn)行其他的操作。
示例
//創(chuàng)建canvas元素 <canvas canvas-id="output_mini" width="400" height="360" style="display: block;position: absolute;top:0;" //創(chuàng)建context對(duì)象 var ctx = uni.createCanvasContext('output_mini', this);
屬性說(shuō)明
屬性名 | 類型 | 說(shuō)明 |
---|---|---|
type | String | 指定 canvas 類型,支持 2d (2.9.0) 和 webgl |
canvas-id | String | canvas 組件的唯一標(biāo)識(shí)符 |
disable-scroll | Boolean | 當(dāng)在 canvas 中移動(dòng)時(shí)且有綁定手勢(shì)事件時(shí),禁止屏幕滾動(dòng)以及下拉刷新 |
hidpi | Boolean | 是否啟用高清處理 |
@touchstart | EventHandle | 手指觸摸動(dòng)作開(kāi)始 |
@touchmove | EventHandle | 手指觸摸后移動(dòng) |
@touchend | EventHandle | 手指觸摸動(dòng)作結(jié)束 |
@touchcancel | EventHandle | 手指觸摸動(dòng)作被打斷,如來(lái)電提醒,彈窗 |
@longtap | EventHandle | 手指長(zhǎng)按 500ms 之后觸發(fā),觸發(fā)了長(zhǎng)按事件后進(jìn)行移動(dòng)不會(huì)觸發(fā)屏幕的滾動(dòng) |
@error | EventHandle | 當(dāng)發(fā)生錯(cuò)誤時(shí)觸發(fā) error 事件,detail = {errMsg: ‘something wrong’} |
注意事項(xiàng):
- canvas 標(biāo)簽?zāi)J(rèn)寬度 300px、高度 225px,動(dòng)態(tài)修改 canvas 大小后需要重新繪制。
- h5、app-vue 中單個(gè)尺寸過(guò)大的 canvas 在 iOS/Safari 無(wú)法繪制(具體限制尺寸未公布)。
- 同一頁(yè)面中的 canvas-id 不可重復(fù),如果使用一個(gè)已經(jīng)出現(xiàn)過(guò)的 canvas-id,該 canvas標(biāo)簽對(duì)應(yīng)的畫布將被隱藏并不再正常工作。
- canvas 在微信小程序、百度小程序、QQ小程序中為原生組件,層級(jí)高于前端組件,請(qǐng)勿內(nèi)嵌在scroll-view、swiper、picker-view、movable-view 中使用。解決 canvas 層級(jí)過(guò)高無(wú)法覆蓋,參考native-component。其他小程序端的 canvas 仍然為 webview 中的 canvas。
- app-vue 中的 canvas 仍然是 webview 的canvas。app-nvue下如需使用canvas,需下載插件。
- app-vue的canvas雖然是webview自帶的canvas,但卻比nvue和微信小程序的原生canvas性能更高。注意并非原生=更快。canvas動(dòng)畫的流暢,關(guān)鍵不在于渲染引擎的速度,而在于減少?gòu)倪壿媽酉蛞晥D層頻繁通信造成的折損。
- 小程序、app-nvue,因?yàn)橥ㄐ抛枞?,難以繪制非常流暢的canvas動(dòng)畫。h5和app-vue不存在此問(wèn)題。但注意,app-vue下若想流暢的繪制canvas動(dòng)畫,需要使用renderjs技術(shù),把操作canvas的js邏輯放到視圖層運(yùn)行,避免邏輯層和視圖層頻繁通信。hello uni-app的canvas示例很典型,在相同手機(jī)運(yùn)行該示例,可以看出在h5端和app端非常流暢,而小程序端由于沒(méi)有renderjs技術(shù),做不到這么流暢的動(dòng)畫。
總結(jié)
到此這篇關(guān)于Vue和uniapp中該如何使用canvas的文章就介紹到這了,更多相關(guān)Vue uniapp使用canvas內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- uniapp中scroll-view實(shí)現(xiàn)自動(dòng)滾動(dòng)到最底部的方法
- uniapp禁止遮罩層下頁(yè)面滾動(dòng)的解決方法
- uniapp微信小程序與H5的彈窗滾動(dòng)穿透解決方法
- uniapp幾行代碼解決滾動(dòng)穿透問(wèn)題(項(xiàng)目實(shí)戰(zhàn))
- uniapp實(shí)現(xiàn)橫向滾動(dòng)選擇日期
- uniapp中canvas繪制圖片內(nèi)容空白報(bào)錯(cuò)的原因及解決
- uniapp封裝canvas組件無(wú)腦繪制保存小程序分享海報(bào)
- uniapp中實(shí)現(xiàn)canvas超出屏幕滾動(dòng)查看功能
相關(guān)文章
antd Form組件方法getFieldsValue獲取自定義組件的值操作
這篇文章主要介紹了antd Form組件方法getFieldsValue獲取自定義組件的值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10Vue通過(guò)for循環(huán)隨機(jī)生成不同的顏色或隨機(jī)數(shù)的實(shí)例
今天小編就為大家分享一篇Vue通過(guò)for循環(huán)隨機(jī)生成不同的顏色或隨機(jī)數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11vue.js聲明式渲染和條件與循環(huán)基礎(chǔ)知識(shí)
這篇文章主要為大家詳細(xì)介紹了vue.js聲明式渲染和條件與循環(huán)的基礎(chǔ)知識(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07vue 導(dǎo)航內(nèi)容設(shè)置選中狀態(tài)樣式的例子
今天小編就為大家分享一篇vue 導(dǎo)航內(nèi)容設(shè)置選中狀態(tài)樣式的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11vue3項(xiàng)目如何配置按需自動(dòng)導(dǎo)入API組件unplugin-auto-import
這篇文章主要介紹了vue3項(xiàng)目如何配置按需自動(dòng)導(dǎo)入API組件unplugin-auto-import問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Vue+Element樹(shù)形表格實(shí)現(xiàn)拖拽排序示例
本文主要介紹了Vue+Element樹(shù)形表格實(shí)現(xiàn)拖拽排序示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08vue.js出現(xiàn)Vue.js?not?detected錯(cuò)誤的解決方案
這篇文章主要介紹了vue.js出現(xiàn)Vue.js?not?detected錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Vue 父子組件實(shí)現(xiàn)數(shù)據(jù)雙向綁定效果的兩種方式(案例代碼)
本文給大家分享Vue 父子組件實(shí)現(xiàn)數(shù)據(jù)雙向綁定效果的兩種方式,方式一是通過(guò)監(jiān)聽(tīng)事件實(shí)現(xiàn)方式二是通過(guò) v-model 實(shí)現(xiàn),每種方式結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-11-11解決Vue2.0 watch對(duì)象屬性變化監(jiān)聽(tīng)不到的問(wèn)題
今天小編就為大家分享一篇解決Vue2.0 watch對(duì)象屬性變化監(jiān)聽(tīng)不到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09vue路由攔截及頁(yè)面跳轉(zhuǎn)的設(shè)置方法
這篇文章主要介紹了vue路由攔截及頁(yè)面跳轉(zhuǎn)的設(shè)置方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05