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 コマンドの使用方法の詳細な説明

推薦する

インデックスとテーブルリターンをカバーするMySQLの使い方

インデックスの2つの主要なカテゴリ使用されるストレージエンジン: MySQL 5.7 InnoDBク...

CSS3 カスタムスクロールバースタイル::webkit-scrollbar サンプルコード詳細説明

Windows のデフォルトのスクロール バー スタイルは見苦しく、プロジェクト内でスクロール バー...

React コードを共有するためのベストプラクティス

プロジェクトがある程度複雑になると、必然的にロジックの再利用の問題に直面することになります。 Rea...

CSS の歪んだ影の実装コード

この記事では、CSS ワープ シャドウの実装コードを紹介し、皆さんと共有します。詳細は以下の通りです...

Ubuntu 18.0.4 MySQL 8.0.20 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.20 のインストールおよび設定方法は、参考としてグラフィック チュートリアルにま...

Nginx のインストールと設定ルールの詳細な紹介

目次1. nginxのインストールと操作(Mac OS環境) 2. nginxルールの設定3. コマ...

MySQL ジョイントインデックス(複合インデックス)の実装

共同インデックスこの記事におけるジョイントインデックスの定義は次のとおりです (MySQL): AL...

Linux での vi (vim) の新しい使い方のまとめ

私は数年間 vi エディタを使ってきましたが、実用的な用途で使ったことはありませんでした。今日 Py...

WeChatアプレットは写真アップロード機能を実現

この記事の例では、WeChatアプレットで写真をアップロードするための具体的なコードを参考までに共有...

CSS ピクセルとさまざまなモバイル画面適応の問題に対する解決策

ピクセル解決通常、モニター解像度と呼ばれるものは、実際にはモニターの物理的な解像度ではなく、デスクト...

webpackのモバイル適応ソリューションの概要

目次レムフォルクスワーゲンサードパーティのUIフレームワークに適応する結論モバイル開発における最も一...

Nginx ベースの Mencached キャッシュ構成の詳細な説明

導入Memcached は分散キャッシュ システムです。Memcached には認証とセキュリティ制...

JS の toFixed() メソッドの丸め精度の問題の詳細な説明

目次落とし穴充填方法何の穴ですか?要約する落とし穴最近、仕事で商品の割引価格を計算すると、いつも1セ...

ウェブ標準学習リソースの素晴らしいコレクション

これらの仕様は、下位互換性のあるドキュメントを Web 上で公開し、できるだけ幅広いユーザーがアクセ...