この記事では、プラグインを使用して画像の比例カットを実現するVueの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。 1. プラグインを使用する - vueCropper プラグインをインストールします: npm install vue-cropper 2. 例: メインページ データ(){ 戻る { フォームデータ:{ 現在のバナー画像:"" }, isShowCropper :false、 } } <el-アップロード クラス="アバターアップローダー" リストタイプ="絵カード" アクション="" accept=".jpg、.jpeg、.png" :資格情報あり="true" :on-change="ファイル変更バナー" :自動アップロード="false" :ファイルリストを表示="false" > <div class="imgBoX"> <img class="bannerImg" v-if="formData.currentBannerImg" title="クリックして変更" :src="formData.currentBannerImg" alt="" /> <i class="el-icon-delete delImg" v-if="formData.currentBannerImg" title="削除"></i> <i v-if="!formData.currentBannerImg" slot="default" class="el-icon-plus"></i> </div> <div slot="tip" class="el-upload__tip">アップロードできるのは jpg、jpeg、png のみで、1 つのファイルのサイズは 10 MB を超えることはできません</div> </el-アップロード> // 画像をアップロードし、成功したらトリミングします async fileChangeBanner(file, fileList) { 定数 fileType = file.name.substring(file.name.lastIndexOf(".") + 1); const fileTypeArr = ["jpg", "jpeg", "png", "JPG", "JPEG", "PNG"]; (fileTypeArr.indexOf(fileType) < 0) の場合 { this.$alert("jpg、jpeg、またはpng形式の画像をアップロードしてください!"、"システムプロンプト", { confirmButtonText: 「確認」 }); ファイルリストを連結します(ファイルリストの長さ - 1); 戻る; } // サイズ制限 const isLt2M = file.size / 1024 / 1024 < this.$FileSize; もし (!isLt2M) { this.$alert(`アップロードされたファイルのサイズは ${this.$FileSize}MB を超えることはできません!`, "システムプロンプト", { confirmButtonText: 「確認」 }); ファイルリストを連結します(ファイルリストの長さ - 1); 戻る; } // 切り抜き部分を追加します this.isShowCropper = true; this.$nextTick(() => { this.$refs.vueCropperDialog.open(ファイル); }); }, vueCropperDialogがコンポーネントとして導入されました <vueCropperDialog @cutImgEnter="cutImgEnter" v-if="isShowCropper" ref="vueCropperDialog"></vueCropperDialog> vueクロッパーダイアログ.vue <!-- --> <テンプレート> <!-- vueCropper による画像の切り取りの実装 --> <el-dialog title="画像の切り抜き" :visible.sync="dialogVisible" append-to-body> <div class="cropper-content"> <div class="cropper" style="text-align:center"> <vueクロッパー ref="クロッパー" :img="オプション.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> </div> <div スロット="フッター" クラス="ダイアログ フッター btnBox"> <div> <el-button icon="el-icon-refresh-left" @click="turnLeftOrRight('left')">左に回転</el-button> <el-button icon="el-icon-refresh-right" @click="turnLeftOrRight('right')">右に回転</el-button> </div> <div> <el-button @click="dialogVisible = false">キャンセル</el-button> <el-button type="primary" @click="finish" :loading="loading">確認</el-button> </div> </div> </el-ダイアログ> </テンプレート> <スクリプト> エクスポートデフォルト{ データ() { 戻る { ファイル情報:"", ダイアログ表示: false、 // クロッピングコンポーネントの基本設定オプション オプション: { : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : picsList: [], // ページに表示される配列 // 重複した送信を防ぐ loading: false }; }, メソッド: { 開く(ファイル) { this.fileinfo = ファイル; this.option.img = ファイル.url; this.dialogVisible = true; }, blobToFile(Blob、ファイル) { const files = new window.File([theBlob], file.name, { type: theBlob.type }); ファイルを返します。 }, //左回転 turnLeftOrRight(type) { if (type == "左") { this.$refs.cropper.rotateLeft(); } それ以外 { this.$refs.cropper.rotateRight(); } }, // クリックして切り取ります。このステップは処理されたアドレスを取得することです。finish() { this.$refs.cropper.getCropBlob((データ) => { this.loading = true; const changeFile = this.blobToFile(data, this.fileinfo); const fileUrl = window.URL.createObjectURL(データ); // 切り取りが成功した後のコールバック。$emit("cutImgEnter", changeFile, fielUrl); this.loading = false; this.dialogVisible = false; }); } } }; </スクリプト> <style lang="scss" スコープ> // スクリーンショット.cropper-content { .クロッパー{ 幅: 自動; 高さ: 300px; } } .btnボックス{ ディスプレイ: フレックス; アイテムの位置を中央揃えにします。 コンテンツの両端揃え: スペースの間; } </スタイル> 3. 効果 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: IDEA の Docker プラグインを介して Springboot プロジェクトを公開する方法の詳細なチュートリアル
タイトルの通り、高さは既知で、左と右の列の幅は 300 ピクセル、中央は適応型です。弾性ボックス自体...
Linux の ps コマンドは Process Status の略です。 ps コマンドは、システ...
序文デモでは古いバージョンのブラウザのグラデーションが実装されています[IE9-]。 IE9 より前...
注1: MySQLデータベースへの接続が遅い問題を解決するvim /etc/my.cnfコンテン...
目次1. セットとは何か2. セットコンストラクタ2.1) 配列2.2) 文字列2.3) 議論2.4...
序文WeChat アプレット開発 (ネイティブ wxml、wxcss) で、{{ }} 内で直接メソ...
一般的に使用される Oracle10g パーティションは、範囲 (範囲パーティション)、リスト (リ...
さっそくAlibaba の oracle11g イメージをプルして構成する docker の記録を開...
目次導入クロージャの使用カレー作りパブリック変数の実装キャッシュカプセル化(属性のプライベート化)閉...
Vueでの監視方法時計知らせ名前: 監視する属性に同じ名前を付ける必要があります。 1. 機能Vue...
目次1. インストールとインポート2. 手ぶれ補正機能を定義する3. チャートコードを描くinit ...
目次tf-gpu をダウンロード取得したtf-gpuイメージに基づいて独自のイメージを構築するイメー...
参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...
MySQL での SQL モードの表示と設定MySQL はさまざまなモードで実行でき、さまざまなシナ...
目次1. 問題の説明2. 問題解決1. 問題の説明Vue プロジェクトを開発する場合、作成時に誤って...