国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

uni-app 微信小程序 保存當(dāng)前頁面為圖片

這篇具有很好參考價值的文章主要介紹了uni-app 微信小程序 保存當(dāng)前頁面為圖片。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

由于在微信小程序環(huán)境下面沒法獲取dom,很多方法都很難去實(shí)現(xiàn)保存html結(jié)構(gòu)的頁面,比較有效的#painter 可以不需要操作dom,但是那玩意兒和重新用js寫個頁面一樣,簡單的頁面還好,復(fù)雜的,元素比較多的就很麻煩,所以考慮用webview+html2canvas來完成

先說一下思路,既然在微信小程序環(huán)境下行不通,那就考慮換個環(huán)境,用webview加載頁面,再通過html2canvas來生成相應(yīng)的canvas,然后轉(zhuǎn)成圖片。

首先是webview,不懂的可以去看下官方文檔,貼在這里:https://uniapp.dcloud.net.cn/component/web-view.html#web-view。也就是在小程序或者app環(huán)境中掛載一個ifram,小程序加載這個頁面必須放到服務(wù)器上,其他像app的可以放在本地。

貼代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-504659.html

//小程序端
<web-view :src="webUrl" @message="handleMessage"></web-view>
//webUrl -->頁面路徑     handleMessage-->頁面像服務(wù)器通信的方法
<script>
export default{
? methods:{
? ? //
    saveImageToPhotosAlbum(data) {
      let base64 = data.replace(/^data:image\/\w+;base64,/, "");//去掉data:image/png;base64,
      //就是這里需要獲取微信環(huán)境的保存路徑,所以最好把轉(zhuǎn)好的base64傳到小程序端來下載? ? 
? ? ? let filePath = wx.env.USER_DATA_PATH + '/detail.png';
      uni.getFileSystemManager().writeFile({
        filePath: filePath,  //創(chuàng)建一個臨時文件名
        data: base64,    //寫入的文本或二進(jìn)制數(shù)據(jù)
        encoding: 'base64',  //寫入當(dāng)前文件的字符編碼
        success: res => {
          uni.saveImageToPhotosAlbum({
            filePath: filePath,
            success: function (res2) {
              uni.showToast({
                title: '保存成功,請從相冊選擇再分享',
                icon: "none",
                duration: 5000
              })
            },
            fail: function (err) {
              // console.log(err.errMsg);
            }
          })
        },
        fail: err => {
          //console.log(err)
        }
      })
    },
? ? ?//接收來自webview的數(shù)據(jù),注意,這里detail.data是一個數(shù)組!
? ? ?handleMessage(res) {
      this.saveImageToPhotosAlbum(res.detail.data[0].imgData)
    ?},
? ? }
? }
</script>
//webview頁面端   我用的是html,你也可以用vue,或者其他的什么框架,但是一定要在服務(wù)器上。本地的話就開一個nginx服務(wù)調(diào)試就好。
//這個html是在uniapp webview copy的模板,里面對各種環(huán)境都做了處理,所以我們直接在另一個script里面寫邏輯就好了。
//引入在線的vue,css,最重要的是這個:https://unpkg.com/@dcloudio/uni-webview-js@0.0.3/index.js ,引入之后允許我們使用uni的部分api。

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  <title>保存html</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
  <script src="https://unpkg.com/http-vue-loader"></script>
  <script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>
  <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
  <link rel="stylesheet" >
  <style type="text/css">
    
  </style>
</head>

<body>
  <div id="app">
    <div class="main-box" :style="{'--uni':uni, 'background': '#FAFAFA url(' + baseUrl + '/img/chuxian_bg.png) no-repeat', 'background-size': '100%' }">
      <div class="order-num">
        訂單編號:{{ dataObj.orderNumber }}
      </div>
      <div class="order-title">
        <h1>車輛出險報告</h1>
        <h3>{{ dataObj.model }}</h3>
      </div>
      <div class="save">
        <button @click="savePicture">保存本頁</button>
      </div>
    </div>
    <div id="downimg" v-show="false"></div>
  </div>
  <script type="text/javascript">
    var userAgent = navigator.userAgent;
    if (userAgent.indexOf('AlipayClient') > -1) {
      // 支付寶小程序的 JS-SDK 防止 404 需要動態(tài)加載,如果不需要兼容支付寶小程序,則無需引用此 JS 文件。
      document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>');
    } else if (/QQ/i.test(userAgent) && /miniProgram/i.test(userAgent)) {
      // QQ 小程序
      document.write(
        '<script type="text/javascript" src="https://qqq.gtimg.cn/miniprogram/webview_jssdk/qqjssdk-1.0.0.js"><\/script>'
      );
    } else if (/miniProgram/i.test(userAgent) && /micromessenger/i.test(userAgent)) {
      // 微信小程序 JS-SDK 如果不需要兼容微信小程序,則無需引用此 JS 文件。
      document.write('<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"><\/script>');
    } else if (/toutiaomicroapp/i.test(userAgent)) {
      // 頭條小程序 JS-SDK 如果不需要兼容頭條小程序,則無需引用此 JS 文件。
      document.write(
        '<script type="text/javascript" src="https://s3.pstatp.com/toutiao/tmajssdk/jssdk-1.0.1.js"><\/script>');
    } else if (/swan/i.test(userAgent)) {
      // 百度小程序 JS-SDK 如果不需要兼容百度小程序,則無需引用此 JS 文件。
      document.write(
        '<script type="text/javascript" src="https://b.bdstatic.com/searchbox/icms/searchbox/js/swan-2.0.18.js"><\/script>'
      );
    } else if (/quickapp/i.test(userAgent)) {
      // quickapp
      document.write('<script type="text/javascript" src="https://quickapp/jssdk.webview.min.js"><\/script>');
    }
  </script>
  <!-- uni 的 SDK -->
  <!-- 需要把 uni.webview.1.5.4.js 下載到自己的服務(wù)器 -->
  <script type="text/javascript" src="https://unpkg.com/@dcloudio/uni-webview-js@0.0.3/index.js"></script>
  <script type="text/javascript">
    Vue.use(httpVueLoader)
    new Vue({
      el: '#app',
      data: {
        dataObj: {},
        baseUrl: 'https://xxx:8443',
      },
      created () {
        this.dataObj = JSON.parse(this.getQueryString('data'))
        this.dataObj.result = JSON.parse(this.dataObj.result)
        console.log(document.documentElement.clientWidth)
        this.uni = 750 / document.documentElement.clientWidth
        console.log(this.uni)
      },
      methods: {
        getQueryString (name) {
          var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
          var r = window.location.search.substr(1).match(reg);
          if (r != null) return decodeURI(r[2]); return null;
        },
        plusXing (str, frontLen, endLen, cha) {
          let len = str.length - frontLen - endLen;
          let xing = "";
          for (let i = 0; i < len; i++) {
            xing += cha;
          }
          return (
            str.substring(0, frontLen) + xing + str.substring(str.length - endLen)
          );
        },
? ? //這里是重點(diǎn),獲取想要保存的html結(jié)構(gòu),然后設(shè)置相應(yīng)的樣式,
        savePicture () {
          let canvas2 = document.createElement('canvas'), // 創(chuàng)建canvas
            _canvas = document.querySelector('.main-box'), //此處可換body,或div等 我們一般可以放繪制的元素
            w = parseInt(window.getComputedStyle(_canvas).width),
            h = parseInt(window.getComputedStyle(_canvas).height);
          //將canvas畫布放大若干倍,然后盛放在較小的容器內(nèi),就顯得不模糊了
          canvas2.width = w * 2;
          canvas2.height = h * 2;
          canvas2.style.width = w + 'px';
          canvas2.style.height = h + 'px';
          let context = canvas2.getContext('2d'),
            rect = $('.main-box').get(0).getBoundingClientRect(); //獲取元素相對于視察的偏移量
          context.scale(2, 2);
          context.translate(-rect.left, -rect.top); //設(shè)置context位置,值為相對于視窗的偏移量負(fù)值,讓圖片復(fù)位
          html2canvas(document.querySelector('.main-box'), {
            canvas: canvas2,
            useCORS: true, // 允許圖片跨域
            width: 584,  // 繪制圖片的寬 2倍
            dpi: window.devicePixelRatio * 2, // dpi  如果模糊的話 就把dpi和scale縮放的值調(diào)大 dpi越高生成的圖片越大
            height: 1188 // 繪制圖片的高 2倍
          }).then(function (canvas) {
            var url = canvas.toDataURL()     //把canvas轉(zhuǎn)成base64
             uni.postMessage({
              data: {
                imgData: base64, // 剛才拿到的base64 數(shù)據(jù)
              },
            });
          });
        }
      },
    })

  </script>
</body>

</html>

到了這里,關(guān)于uni-app 微信小程序 保存當(dāng)前頁面為圖片的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • uni-app微信小程序,在頁面頂部添加返回按鍵,返回上一個頁面

    uni-app微信小程序,在頁面頂部添加返回按鍵,返回上一個頁面

    1.示例: 2.實(shí)現(xiàn)方式: 在page.json文件中的style里添加如下代碼: 3.tips: 在page.json中的頁面順序就是小程序加載過程中的頁面順序

    2024年02月12日
    瀏覽(26)
  • uni-app框架 微信小程序頁面顯示正常,但安卓頁面樣式顯示異常

    uni-app框架 微信小程序頁面顯示正常,但安卓頁面樣式顯示異常

    今天在繼續(xù)復(fù)習(xí)uni-app項目時,使用模擬器運(yùn)行時,突然發(fā)現(xiàn)封裝的search組件樣式無法正常顯示,但是小程序頁面又是正常的,打包后真機(jī)也是一樣的結(jié)果。在uni-app的控制臺報如下錯誤: [Vue warn]: Error in render: “TypeError: Cannot read property ‘children’ of undefined” TypeError: Cannot rea

    2024年04月11日
    瀏覽(27)
  • uni-app 微信小程序之好看的ui登錄頁面(五)

    uni-app 微信小程序之好看的ui登錄頁面(五)

    更多登錄ui頁面 uni-app 微信小程序之好看的ui登錄頁面(一) uni-app 微信小程序之好看的ui登錄頁面(二) uni-app 微信小程序之好看的ui登錄頁面(三) uni-app 微信小程序之好看的ui登錄頁面(四) uni-app 微信小程序之好看的ui登錄頁面(五)

    2024年02月04日
    瀏覽(93)
  • uni-app 微信小程序之好看的ui登錄頁面(二)

    uni-app 微信小程序之好看的ui登錄頁面(二)

    更多登錄ui頁面 uni-app 微信小程序之好看的ui登錄頁面(一) uni-app 微信小程序之好看的ui登錄頁面(二) uni-app 微信小程序之好看的ui登錄頁面(三) uni-app 微信小程序之好看的ui登錄頁面(四) uni-app 微信小程序之好看的ui登錄頁面(五)

    2024年02月03日
    瀏覽(119)
  • uni-app 微信小程序之好看的ui登錄頁面(一)

    uni-app 微信小程序之好看的ui登錄頁面(一)

    更多登錄ui頁面 uni-app 微信小程序之好看的ui登錄頁面(一) uni-app 微信小程序之好看的ui登錄頁面(二) uni-app 微信小程序之好看的ui登錄頁面(三) uni-app 微信小程序之好看的ui登錄頁面(四) uni-app 微信小程序之好看的ui登錄頁面(五)

    2024年02月04日
    瀏覽(91)
  • uni-app 微信小程序之好看的ui登錄頁面(四)

    uni-app 微信小程序之好看的ui登錄頁面(四)

    更多登錄ui頁面 uni-app 微信小程序之好看的ui登錄頁面(一) uni-app 微信小程序之好看的ui登錄頁面(二) uni-app 微信小程序之好看的ui登錄頁面(三) uni-app 微信小程序之好看的ui登錄頁面(四) uni-app 微信小程序之好看的ui登錄頁面(五)

    2024年02月04日
    瀏覽(93)
  • uni-app 微信小程序之好看的ui登錄頁面(三)

    uni-app 微信小程序之好看的ui登錄頁面(三)

    更多登錄ui頁面 uni-app 微信小程序之好看的ui登錄頁面(一) uni-app 微信小程序之好看的ui登錄頁面(二) uni-app 微信小程序之好看的ui登錄頁面(三) uni-app 微信小程序之好看的ui登錄頁面(四) uni-app 微信小程序之好看的ui登錄頁面(五)

    2024年01月15日
    瀏覽(88)
  • Uni-app實(shí)現(xiàn)左右滑動頁面內(nèi)容切換(兼容微信小程序)

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 ? ? ? ? 前言 ? ? ? ? 整體思路 ? ? ? ??一、HTML部分 ????????二、Script部分 ????????三、Style部分 ? ? ? ? ? (先聲明哦我可不是偷懶,只是想學(xué)術(shù)借鑒一下)因?yàn)樽罱性谧鲎笥一瑒庸δ埽?/p>

    2024年02月07日
    瀏覽(112)
  • 【微信小程序】如何獲得自己當(dāng)前的定位呢?本文利用逆地址解析、uni-app帶你實(shí)現(xiàn)

    【微信小程序】如何獲得自己當(dāng)前的定位呢?本文利用逆地址解析、uni-app帶你實(shí)現(xiàn)

    目錄 前言 效果展示 一、在騰訊定位服務(wù)配置微信小程序JavaScript SDK 二、使用uni-app獲取定位的經(jīng)緯度 三、?逆地址解析,獲取精確定位 四、小提示 在瀏覽器搜索騰訊定位服務(wù),找到官方網(wǎng)站,利用微信或者其他賬號注冊登錄,登錄后如下圖操作 點(diǎn)進(jìn)去之后,可以看到如下圖

    2024年01月19日
    瀏覽(27)
  • 解決uni-app微信小程序底部輸入框,鍵盤彈起時頁面整體上移問題

    解決uni-app微信小程序底部輸入框,鍵盤彈起時頁面整體上移問題

    做了一個記錄頁面(類似單方聊天頁),輸入框在底部;當(dāng)彈出鍵盤時,頁面整體上移,頁面頭信息會消失不見 比如一個記錄頁面,需要在鍵盤彈出時: 底部的輸入框跟隨鍵盤上彈 頁面頭固定在頂部不動 聊天信息區(qū)域(即內(nèi)容區(qū))調(diào)整高度,該區(qū)域局部滾動 底部輸入框f

    2024年02月13日
    瀏覽(383)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包