マウスをドラッグしてページのスクリーンショットを撮ります(指定した領域にスクリーンショットをドラッグすることもできます) 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL における制限関数と合計関数の混在使用の問題の詳細な説明
>>: Linux の traceroute コマンドの使用方法の詳細な説明
インデックスの2つの主要なカテゴリ使用されるストレージエンジン: MySQL 5.7 InnoDBク...
Windows のデフォルトのスクロール バー スタイルは見苦しく、プロジェクト内でスクロール バー...
プロジェクトがある程度複雑になると、必然的にロジックの再利用の問題に直面することになります。 Rea...
この記事では、CSS ワープ シャドウの実装コードを紹介し、皆さんと共有します。詳細は以下の通りです...
MySQL 8.0.20 のインストールおよび設定方法は、参考としてグラフィック チュートリアルにま...
目次1. nginxのインストールと操作(Mac OS環境) 2. nginxルールの設定3. コマ...
共同インデックスこの記事におけるジョイントインデックスの定義は次のとおりです (MySQL): AL...
私は数年間 vi エディタを使ってきましたが、実用的な用途で使ったことはありませんでした。今日 Py...
この記事の例では、WeChatアプレットで写真をアップロードするための具体的なコードを参考までに共有...
ピクセル解決通常、モニター解像度と呼ばれるものは、実際にはモニターの物理的な解像度ではなく、デスクト...
目次レムフォルクスワーゲンサードパーティのUIフレームワークに適応する結論モバイル開発における最も一...
コマンドライン mysqld –skip-grant-tables は mysql8 では正常に起動...
導入Memcached は分散キャッシュ システムです。Memcached には認証とセキュリティ制...
目次落とし穴充填方法何の穴ですか?要約する落とし穴最近、仕事で商品の割引価格を計算すると、いつも1セ...
これらの仕様は、下位互換性のあるドキュメントを Web 上で公開し、できるだけ幅広いユーザーがアクセ...