最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你用wxml2canvas將微信小程序頁(yè)面轉(zhuǎn)為圖片

 更新時(shí)間:2022年11月26日 11:33:25   作者:兜兜轉(zhuǎn)轉(zhuǎn)的菜鳥  
如果需要實(shí)現(xiàn)將小程序的頁(yè)面轉(zhuǎn)為圖片,第一步是要先把頁(yè)面轉(zhuǎn)為canvas,再將canvas轉(zhuǎn)為圖片,下面這篇文章主要給大家介紹了關(guān)于用wxml2canvas將微信小程序頁(yè)面轉(zhuǎn)為圖片的相關(guān)資料,需要的朋友可以參考下

最近有個(gè)微信小程序項(xiàng)目,需要將頁(yè)面轉(zhuǎn)為圖片。微信小程序提供的Api是wx.canvasToTempFilePath,這個(gè)方法是將畫布指定區(qū)域的內(nèi)容導(dǎo)出生成指定大小的圖片,但是我們是將頁(yè)面導(dǎo)出圖片,所以可以使用wxml2canvas解決

1、安裝wxml2canvas

npm init
npm install wxml2canvas --save --production

npm init 是npm初始化,這個(gè)時(shí)候根據(jù)編譯器終端一路回車最終會(huì)生成一個(gè)package.json文件

--production 是減少安裝與業(yè)務(wù)無(wú)關(guān)的包,減少項(xiàng)目的體積。

2、引入wxml2canvas

import Wxml2Canvas from 'wxml2canvas'

引入之后需要對(duì)微信開發(fā)者工具做出如下設(shè)置,否則引入之后會(huì)報(bào)錯(cuò)

 其次選擇微信開發(fā)者工具--》工具---》構(gòu)建npm

這個(gè)時(shí)候就不會(huì)報(bào)錯(cuò)了

3、使用wxml2canvas

首先在需要生成圖片的wxml文件中創(chuàng)建canvas容器以及選擇生成圖片的范圍

<canvas canvas-id="myCanvas" class="myCanvas"></canvas>
<view id="my-canvas" class="my_canvas>
    <view class="header my_draw_canvas">
        <image class="headerImg my_draw_canvas" src="{{order.headerImg}}" data-type="image" data-url="{{order.headerImg}}"></image>
        <text class="headerTitle my_draw_canvas" data-type="text" data-text="您的訂單詳情">您的訂單詳情</text>
    </view>
</view>

每個(gè)需要生成圖片的內(nèi)容,需要注明類型。

text標(biāo)簽對(duì)應(yīng)的data-type='text',image標(biāo)簽對(duì)應(yīng)的data-type=‘image’

data-text=‘需要展示的文本’  data-url='需要展示的圖片'

其他的data-type類型可以參考https://github.com/liudongyun1215/wxml2canvas

這個(gè)鏈接里面包含了許多配置項(xiàng),就不一一列舉了,遇到問(wèn)題的時(shí)候可以參考這個(gè)文檔

js文件的方法

drawMyCanvas() {
        wx.showLoading()
        const that = this
        const query = wx.createSelectorQuery().in(this);
        query.select('#my-canvas').fields({ // 選擇需要生成canvas的范圍
            size: true,
            scrollOffset: true
        }, data => {
            let width = data.width;
            let height = data.height;
            that.setData({
                width,
                height
            })
            setTimeout(() => {
                that.startDraw()
            }, 1500);
       }).exec()
},
startDraw() {
        let that = this
        
        // 創(chuàng)建wxml2canvas對(duì)象
        let drawMyImage = new Wxml2Canvas({
          element: 'myCanvas', // canvas的id,
          obj: that, // 傳入當(dāng)前組件的this
          width: that.data.width * 2,
          height: that.data.height * 2,
          background: '#141415', // 生成圖片的背景色
          progress(percent) { // 進(jìn)度
            // console.log(percent);
          },
          finish(url) { // 生成的圖片
            wx.hideLoading()
            that.savePoster(url)
          },
          error(res) { // 失敗原因
            console.log(res);
            wx.hideLoading()
          }
        }, this);
        let data = {
            // 獲取wxml數(shù)據(jù)
            list: [{
                type: 'wxml',
                class: '.my_canvas .my_draw_canvas',  // my_canvas要繪制的wxml元素根類名, my_draw_canvas單個(gè)元素的類名(所有要繪制的單個(gè)元素都要添加該類名)
                limit: '.my_canvas', // 要繪制的wxml元素根類名
                x: 0,
                y: 0
            }]
        }
        // 繪制canvas
        drawMyImage.draw(data, this);
    },
savePoster() {
        const that = this
        wx.saveImageToPhotosAlbum({
            filePath: that.data.imgUrl,
            success: function() {
                wx.showToast({
                    title: '保存成功',
                    icon: 'none',
                    duration: 1500
                });
            },
            fail(err) {
              if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response") {
                wx.showModal({
                  title: '提示',
                  content: '需要您授權(quán)保存相冊(cè)',
                  showCancel: false,
                  success: modalSuccess => {
                    wx.openSetting({
                      success(settingdata) {
                        if (settingdata.authSetting['scope.writePhotosAlbum']) {
                            wx.saveImageToPhotosAlbum({
                                filePath: that.data.imgUrl,
                                success: function () {
                                  wx.showToast({
                                    title: '保存成功',
                                    icon: 'success',
                                    duration: 2000
                                  })
                                },
                            })
                        } else {
                            wx.showToast({
                                title: '授權(quán)失敗,請(qǐng)稍后重新獲取',
                                icon: 'none',
                                duration: 1500
                            });
                        }
                      }
                    })
                  }
                })
              }
            }
          })
      },

4、注意

使用wxml保存圖片的時(shí)候,如果包含在線的圖片鏈接,需要在微信小程序后臺(tái)設(shè)置白名單,將在線鏈接的域名放置downloadFile合法域名里,否則生成圖片的時(shí)候會(huì)報(bào)錯(cuò)

還有就是頁(yè)面上的標(biāo)簽需要有寬度,否則模擬器導(dǎo)出正常,真機(jī)導(dǎo)出樣式就會(huì)亂

總結(jié)

到此這篇關(guān)于用wxml2canvas將微信小程序頁(yè)面轉(zhuǎn)為圖片的文章就介紹到這了,更多相關(guān)微信小程序頁(yè)面轉(zhuǎn)為圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS實(shí)現(xiàn)圖片放大鏡插件詳解

    JS實(shí)現(xiàn)圖片放大鏡插件詳解

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)圖片放大鏡插件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Dom加載讓圖片加載完再執(zhí)行的腳本代碼

    Dom加載讓圖片加載完再執(zhí)行的腳本代碼

    當(dāng)大家使用window.onload執(zhí)行一個(gè)函數(shù)時(shí),必須要等到頁(yè)面上的圖片等信息全部加載完畢之后才執(zhí)行的。但很多時(shí)候圖片的數(shù)量比較多,所以需要很多時(shí)間下載。更令人尷尬的是,當(dāng)網(wǎng)頁(yè)文檔(或者說(shuō)Dom)已經(jīng)加載完畢,而圖片尚未加載完畢,很多用戶已經(jīng)開始瀏覽網(wǎng)頁(yè),但這時(shí)很多由window.onload所觸發(fā)的函數(shù)不能執(zhí)行,這就導(dǎo)致一部分功能不能完美地給用戶使用,更嚴(yán)重的是會(huì)給用戶留下不好的印象!
    2008-05-05
  • Javascript 函數(shù)對(duì)象的多重身份

    Javascript 函數(shù)對(duì)象的多重身份

    函數(shù)對(duì)象是javascript 中一個(gè)很特殊的對(duì)象,其特殊體現(xiàn)在他的多重身份上。
    2009-06-06
  • javascript函數(shù)式編程實(shí)例分析

    javascript函數(shù)式編程實(shí)例分析

    這篇文章主要介紹了javascript函數(shù)式編程,實(shí)例分析了javascript函數(shù)式編程的相關(guān)使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 使用Javascript接收get傳遞的值的代碼

    使用Javascript接收get傳遞的值的代碼

    用js獲取頁(yè)面值得仿佛,需要的朋友可以參考下。
    2011-11-11
  • 微信小程序?qū)崿F(xiàn)批量倒計(jì)時(shí)功能

    微信小程序?qū)崿F(xiàn)批量倒計(jì)時(shí)功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)批量倒計(jì)時(shí)功能,適用于商品列表倒計(jì)時(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • JavaScript進(jìn)階教程之函數(shù)的定義、調(diào)用及this指向問(wèn)題詳解

    JavaScript進(jìn)階教程之函數(shù)的定義、調(diào)用及this指向問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于JavaScript進(jìn)階教程之函數(shù)的定義、調(diào)用及this指向問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 使用webpack編譯es6代碼的方法步驟

    使用webpack編譯es6代碼的方法步驟

    這篇文章主要介紹了使用webpack編譯es6代碼的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • js實(shí)現(xiàn)漂浮回頂部按鈕實(shí)例

    js實(shí)現(xiàn)漂浮回頂部按鈕實(shí)例

    這篇文章主要介紹了js實(shí)現(xiàn)漂浮回頂部按鈕的方法,實(shí)例分析了javascript實(shí)現(xiàn)返回頂部功能的樣式與動(dòng)態(tài)實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • JS判斷日期格式是否合法的簡(jiǎn)單實(shí)例

    JS判斷日期格式是否合法的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇JS判斷日期格式是否合法的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07

最新評(píng)論

肇州县| 肇庆市| 姚安县| 岗巴县| 神池县| 通辽市| 青州市| 鞍山市| 大港区| 陕西省| 宣威市| 淮北市| 元朗区| 大兴区| 普定县| 黄浦区| 临湘市| 和林格尔县| 孟连| 山阳县| 甘孜县| 体育| 辰溪县| 娱乐| 邓州市| 峨眉山市| 嘉善县| 赤壁市| 泾源县| 许昌市| 内乡县| 黄山市| 依安县| 南阳市| 邹城市| 清新县| 定兴县| 刚察县| 高雄市| 大新县| 惠来县|