この記事では、プラグインを使用して画像の比例カットを実現する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 プロジェクトを公開する方法の詳細なチュートリアル
Linux で if を使用してディレクトリが存在するかどうかを判断する方法方法は次のとおりです。...
1. グローバルオブジェクトすべてのモジュールは呼び出すことができます1) global: ブラウザ...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...
Windows 10 に Docker をインストールする場合、コンテナタイプを Linux コンテ...
#文字列連結 concat(s1,s2); テーブル内の last_name と first_nam...
今日もとても実践的な事例です。名前を聞くだけで高度で難しそうですよね?今日はカルーセル画像の真髄を簡...
この記事では、DingTalkの勤怠カレンダーを実装するためのVueの具体的なコードを参考までに共有...
目次1. イメージをプルする2. イメージを実行する3. コンテナ内でアプリケーションをテストする4...
インデックスを使用してクエリを高速化する1. はじめにWeb 開発には、ビジネス テンプレート、ビジ...
Vmvare が仮想マシンのディスク サイズを設定した後、ディスク領域が不足していることがわかりまし...
目次1. 現在のデータベース支出のストレージエンジンを表示する方法1:方法2: 2. ENGINE=...
Centos6にZLMediaKitをインストールするZLMediaKit の作者は Ubuntu ...
方法1: cmdコマンドを使用するまず、DOS ウィンドウを開き、スタート、実行、cmd と入力しま...
この記事では、ドラッグアンドドロップをJSオブジェクト指向で実装するための具体的なコードを参考までに...
この記事の例では、ショッピングカートの加算と減算、価格計算を実装するためのjsの具体的なコードを共有...