Vueのドラッグスクリーンショット機能を実装する簡単な方法

Vueのドラッグスクリーンショット機能を実装する簡単な方法

マウスをドラッグしてページのスクリーンショットを撮ります(指定した領域にスクリーンショットをドラッグすることもできます)

1. html2canvasとvue-cropperをインストールする

npm i html2canvas --save // 指定した領域を画像に変換します npm i vue-cropper -S // 画像をトリミングします

2. main.jsにvue-cropperコンポーネントを登録する

'vue-cropper' から VueCropper をインポートします
Vue.use(VueCropper)

3. ページにhtml2canvasを導入する

  「html2canvas」からhtml2canvasをインポートします
  エクスポートデフォルト{
  }

4. コードの分解

1. 指定した領域を画像に変換する

this.$nextTick(()=>{
   html2canvas(document.body,{}).then(canvas => {    
     dataURL を canvas.toDataURL("image/png") とします。
     this.uploadImg = データURL
     this.loading = true
   });
 })

ここでは、本文ページ全体を画像に変換してbase64形式のデータを取得し、その他の領域はクラスまたはIDを直接取得します。

2. 生成された画像をドラッグしてスクリーンショットを撮ります

<テンプレート>
	<div class="pop_alert" v-if="表示">
	   <vueクロッパー
	      @mouseenter.native="入力"
	      @mouseleave.native="離れる"
	      ref="クロッパー"
	      :img="アップロード画像"
	      :outputSize="オプションのサイズ"
	      :outputType="オプション.outputType"
	      :info="true"
	      :full="オプション.full"
	      :canMove="オプション.canMove"
	      :canMoveBox="オプション.canMoveBox"
	      :original="オプション.original"
	      :autoCrop="オプション.autoCrop"
	      :fixed="オプション.fixed"
	      :fixedNumber="オプション.fixedNumber"
	      :centerBox="オプション.centerBox"
	      :infoTrue="オプション.infoTrue"
	      :fixedBox="オプション.fixedBox"
	      スタイル="背景画像:なし"
	    </vueクロッパー>
	    <div class="btn_box">
	    	<div @click="save">スクリーンショットを確認</div>
	   	    <div @click="close">キャンセル</div>
	    </div>
	 </div>
 </テンプレート>
<スクリプト>
 エクスポートデフォルト{
   データ(){
       オプション: {
          info: true, // 切り抜きボックスのサイズ情報outputSize: 0.8, // 切り抜かれた画像の品質outputType: "jpeg", // 切り抜かれた画像の形式canScale: false, // 画像がスクロールホイールによる拡大縮小を許可するかどうかautoCrop: false, // デフォルトでスクリーンショットボックスを生成するかどうかfixedBox: false, // 固定スクリーンショットボックスのサイズは変更できないfixed: false, // スクリーンショットボックスの固定アスペクト比を有効にするかどうかfixedNumber: [7, 5], // スクリーンショットボックスのアスペクト比full: true, // スクリーンショットを元のアスペクト比で出力するかどうかcanMove: false, // 元の画像を移動できるかどうかcanMoveBox: true, // スクリーンショットボックスをドラッグできるかどうかoriginal: false, // アップロードされた画像は元のアスペクト比でレンダリングされるcenterBox: false, // スクリーンショットボックスが画像に制限されるかどうかinfoTrue: true // 実際の出力画像の幅と高さを表示するには true、スクリーンショットボックスの幅と高さを表示するには false},
        アップロード画像:"",
        表示:偽
   },
   方法:{
     入力() {
       if (this.uploadImg == "") {
         戻る;
       }
       this.$refs.cropper.startCrop(); // 切り取りを開始},
     離れる() {
       this.$refs.cropper.stopCrop();//切り取りを停止},
     save() { //スクリーンショットを確認する this.$refs.cropper.getCropData((data) => { //スクリーンショットのbase64形式のデータを取得する console.log(data)
          this.show = false
        })
        // this.$refs.cropper.getCropBlob(data => { //スクリーンショットのBlob形式のデータを取得します// this.cutImg = data;
        // });
      },
      close(){ //キャンセル this.show = false
      }
   }
 }
 </スクリプト>

5. すべてのコード

<テンプレート>
   <div>
     <div @click="tailoring">カット</div>
	<!--ページの他のコンテンツを書き続けます。Pop_alert はコンポーネントにカプセル化して使用できます -->
	
     <div class="pop_alert" v-if="表示">
	   <vueクロッパー
	      @mouseenter.native="入力"
	      @mouseleave.native="離れる"
	      ref="クロッパー"
	      :img="アップロード画像"
	      :outputSize="オプションのサイズ"
	      :outputType="オプション.outputType"
	      :info="true"
	      :full="オプション.full"
	      :canMove="オプション.canMove"
	      :canMoveBox="オプション.canMoveBox"
	      :original="オプション.original"
	      :autoCrop="オプション.autoCrop"
	      :fixed="オプション.fixed"
	      :fixedNumber="オプション.fixedNumber"
	      :centerBox="オプション.centerBox"
	      :infoTrue="オプション.infoTrue"
	      :fixedBox="オプション.fixedBox"
	      スタイル="背景画像:なし"
	    </vueクロッパー>
	    <div class="btn_box">
	    	<div @click="save">スクリーンショットを確認</div>
	   	    <div @click="close">キャンセル</div>
	    </div>
	 </div>
   </div>
</テンプレート>
<スクリプト>
「html2canvas」からhtml2canvasをインポートします
 エクスポートデフォルト{
  データ(){
   戻る {
     オプション: {
          info: true, // 切り抜きボックスのサイズ情報outputSize: 0.8, // 切り抜かれた画像の品質outputType: "jpeg", // 切り抜かれた画像の形式canScale: false, // 画像がスクロールホイールによる拡大縮小を許可するかどうかautoCrop: false, // デフォルトでスクリーンショットボックスを生成するかどうかfixedBox: false, // 固定スクリーンショットボックスのサイズは変更できないfixed: false, // スクリーンショットボックスの固定アスペクト比を有効にするかどうかfixedNumber: [7, 5], // スクリーンショットボックスのアスペクト比full: true, // スクリーンショットを元のアスペクト比で出力するかどうかcanMove: false, // 元の画像を移動できるかどうかcanMoveBox: true, // スクリーンショットボックスをドラッグできるかどうかoriginal: false, // アップロードされた画像は元のアスペクト比でレンダリングされるcenterBox: false, // スクリーンショットボックスが画像に制限されるかどうかinfoTrue: true // 実際の出力画像の幅と高さを表示するには true、スクリーンショットボックスの幅と高さを表示するには false},
        アップロード画像:"",
        表示:偽
   }
  },
  方法:{
    tailoring(){ //これを切り取ります。$nextTick(()=>{
           html2canvas(document.body,{}).then(canvas => {
             dataURL を canvas.toDataURL("image/png") とします。
             this.uploadImg = データURL
             this.show = true
           });
       })
    },
    入力() {
       if (this.uploadImg == "") {
         戻る;
       }
       this.$refs.cropper.startCrop(); // 切り取りを開始},
     離れる() {
       this.$refs.cropper.stopCrop();//切り取りを停止},
     save() { //スクリーンショットを確認する this.$refs.cropper.getCropData((data) => { //スクリーンショットのbase64形式のデータを取得する console.log(data)
          this.show = false
        })
        // this.$refs.cropper.getCropBlob(data => { //スクリーンショットのBlob形式のデータを取得します// this.cutImg = data;
        // });
      },
      close(){ //キャンセル this.show = false
      }
   }
 }
</スクリプト>
<スタイル>
	.pop_alert{
      幅: 100%;
	  高さ: 100%;
	  位置: 絶対;
	  上: 0;
	  左: 0;
	  境界線: 1px 破線の赤;
	  背景色: #000000;
    }
    .btn_box{
        位置: 絶対;
	    上: 0;
	    色: 赤;
	    右: 0;
	    フォントサイズ: 30px;
	    ディスプレイ: フレックス;
        アイテムの位置を中央揃えにします。
	    zインデックス: 6666;
    }
</スタイル>

レンダリング

要約する

Vue ドラッグ スクリーンショット機能の実装に関するこの記事はこれで終わりです。Vue ドラッグ スクリーンショット機能に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueをベースにドラッグ効果を実現
  • Vue ベースのドラッグ アンド ドロップ機能を実装する
  • Vue.js でドラッグ アンド ドロップ効果を実装する例
  • Vue.js は画像のランダムドラッグを実装します
  • Vueはdivドラッグアンドドロップを実装します
  • Vue カスタム ディレクティブ ドラッグ関数の例
  • Vueは不規則なスクリーンショットを実装する

<<:  MySQL における制限関数と合計関数の混在使用の問題の詳細な説明

>>:  Linux の traceroute コマンドの使用方法の詳細な説明

推薦する

IE、Firefox、Chromeブラウザではスペースの表示が異なります

&nbsp;&nbsp;IE、Firefox、Chrome ブラウザでの表示効果は、...

Ubuntu 18.04 のインストールで「ldlinux.c32 のロードに失敗しました」というエラーが表示され、解決手順がわかりません

序文私は Win7 を搭載した古いラップトップを持っています。古いシステムを維持しながら、同時に U...

MYSQLについては、データ型と操作テーブルを知る必要があります

データ型と操作データテーブル1.1 MySQL 型: 整数 1.2 MySQL データ型: 浮動小数...

一般的なフロントエンドJavaScriptメソッドのカプセル化

目次1. 値を入力し、そのデータ型を返す** 2. アレイ重複排除3. 文字列の重複排除4. ディー...

MySQL マスタースレーブレプリケーションの実践の詳細説明 - GTID ベースのレプリケーション

GTIDベースのレプリケーション導入GTID ベースのレプリケーションは、MySQL 5.6 以降に...

Windows で MySQL 5.6 を 5.7 にアップグレードする方法

前面に書かれたMySQL をアップグレードする方法には、インプレース アップグレードと論理アップグレ...

Dockerイメージをプライベートリポジトリにアップロードする方法の例

イメージは、GitHub と同様に Docker パブリック リポジトリに直接簡単にプッシュできます...

macOS での MySQL 8.0.16 のインストールと設定のグラフィック チュートリアル

この記事では、macOSでのMySQL 8.0.16のインストールと設定のチュートリアルを参考までに...

js は丸で囲まれた数字のリストのサンプルコードを動的に追加します

1. まず本文にulタグを追加します <!-- 順序なしリスト --> <ul i...

js の一般的でない演算子と演算子の概要

一般的な演算子と JavaScript の演算子の概要カテゴリオペレーター算術演算子+、–、*、/、...

MySQL データ圧縮パフォーマンス比較の詳細

目次1. テスト環境1.1 ハードウェアとソフトウェア1.2 テーブル構造2. テストの目的2.1 ...

MySQLで大きなテーブルをエレガントに削除する方法について簡単に説明します

目次1. 切り捨て操作1.1 MySQL truncate はどのような操作を実行しますか? 1.2...

ElementUI の el-dropdown に複数のパラメータを実装する方法

最近、業務上のボタンの増加により、ページレイアウトにボタンが多すぎて、ページが美しくなく、ユーザーエ...

オブジェクト内のフィールドを削除する js メソッド

この記事では主に、オブジェクト内のフィールドを削除するための js の実装を紹介し、次のように共有し...

IE6 で幅と高さがおかしいバグ

図に示すように: しかし、IE6で表示すると、right:1px:になります。 IE6 には、幅と高...