Vue は、デスクトップから Web ページにファイルをドラッグするためのサンプル コードを実装します (画像/オーディオ/ビデオを表示できます)

Vue は、デスクトップから Web ページにファイルをドラッグするためのサンプル コードを実装します (画像/オーディオ/ビデオを表示できます)

効果

ここに画像の説明を挿入

ここに画像の説明を挿入

使用する場合は、コードとスタイルを自分で最適化してください。

画像を表示しない/ビデオとオーディオを再生しないコードは次のとおりです。

<テンプレート>
 <div>
  <div v-on:dragover="tts" v-on:drop="ttrs" style="幅: 800px;高さ: 200px;境界線: 1px 黒一色;フォントサイズ: 40px;行の高さ: 200px">
   {{dt}}
  </div>
  <div v-for="(item,index) in fileList" :key="index" style="width: 800px;height: 200px;border: 1px solid black;font-size: 40px;position: relative;top:10px">
   <p style="font-size: 20px;float: left;position: relative;left: 20pxword-wrap:break-word;word-break:normal;">{{item.name}}</p>
   <h5 style="float:right;position: absolute;top: 80px;right: 20px">{{item.type}}</h5>
   <h6 style="position: absolute;top: 80px;float: left;left: 20px">{{item.size | sizeType}}</h6​​>
   <button style="float: right" @click="del(index)">削除</button>
  </div>
 </div>
</テンプレート>

<スクリプト>
 エクスポートデフォルト{
  名前: "trs",
  データ(){
   戻る {
    dt:"",
    ファイルリスト:[]
   }
  },
  フィルター:
   サイズタイプ(val){
    kbs = val/1024 とします。
    mbs = 0 とします。
    gbs = 0 とします。
    (KBS>=1024)の場合{
     mbs = kbs/1024;
    }
    mbs>=1024の場合{
     GBS = MBS/1024
     gbs.toFixed(2)+"GB"を返します。
    }そうでない場合 (mbs>=1){
     mbs.toFixed(2)+"MB"を返す
    }それ以外 {
     kbs.toFixed(2)+"KB"を返す
    }
   }
  },
  マウント() {
   vm = this とします。
   window.addEventListener("dragdrop", this.testfunc, false);


   document.addEventListener("dragover",関数() {
    コンソール.log(111)
    vm.dt = "ファイルをアップロードするにはここにドラッグしてください"
    コンソールログ(vm.dt)
   })
  },
  方法:{
   testfunc(イベント) {
    アラート("ドラッグドロップ!");
    イベントの伝播を停止します。
    イベントをデフォルトにしない();
   },
   del(インデックス){
    this.fileList.splice(インデックス,1)
    if(this.fileList.length==0){
     this.dt = ""
    }
   },
   tts(e){
    コンソール.log(e)
    this.dt = "ファイルをアップロードするにはここにドラッグしてください"
   },
   ttrs(e){
    コンソール.log(e)
    コンソールログ(e.dataTransfer.files)
    datas = e.dataTransfer.files とします。
    datas.forEach(item=>{
     this.fileList.push(アイテム)
    })
    e.stopPropagation();
    e.preventDefault();
    this.dt = "アップロードが完了しました。アップロードを続行できます"

   }
  }
 }
</スクリプト>

<スタイルスコープ>

</スタイル>

画像を表示したい場合/動画を再生したい場合/音声を再生したい場合

ここでは、デフォルトで最後にアップロードされたファイルを表示/再生しますが、必要に応じて変更できます。

<テンプレート>
 <div>
 <div
  v-on:dragover="tts"
  v-on:drop="ttrs"
  スタイル="幅: 800px;高さ: 200px;境界線: 1px 黒一色;フォントサイズ: 40px;行の高さ: 200px"
 >
  {{dt}}
 </div>
 <div
  v-for="(item, index) in fileList"
  :key="インデックス"
  スタイル="幅: 800px;高さ: 200px;境界線: 1px 黒一色;フォントサイズ: 40px;位置: 相対;上: 10px"
 >
  <p
  style="font-size: 20px;float: left;position: relative;left: 20pxword-wrap:break-word;word-break:normal;"
  >
  {{アイテム名}}
  </p>
  <h5 style="float:right;position: absolute;top: 80px;right: 20px">
  {{アイテムタイプ}}
  </h5>
  <h6 スタイル="位置: 絶対;上: 80px;フロート: 左;左: 20px">
  {{ item.size | サイズタイプ }}
  </h6>
  <button style="float: right" @click="del(index)">削除</button>
 </div>
 <div style="position:relative;top: 100px">
  <img v-if="isImage" :src="srcs" style="width: 800px" />
  <video v-if="isVideo" コントロール :src="srcs" スタイル="width: 800px"></video>
  <audio v-if="isAudio" コントロール :src="srcs" スタイル="width: 800px"></audio>
 </div>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: "trs",
 データ() {
 戻る {
  日付: "",
  ファイルリスト: [],
  ソース: "",
  isImage:false、
  isAudio:false、
  isVideo:false
 };
 },
 フィルター:
 サイズタイプ(val) {
  kbs = val / 1024とします。
  mbs = 0 とします。
  gbs = 0 とします。
  (kbs >= 1024)の場合{
  mbs = kbs / 1024;
  }
  mbs >= 1024の場合{
  gbs = mbs / 1024;
  gbs.toFixed(2) + "GB" を返します。
  } それ以外の場合 (mbs >= 1) {
  mbs.toFixed(2) + "MB"を返します。
  } それ以外 {
  kbs.toFixed(2) + "KB"を返します。
  }
 }
 },
 マウント() {
 vm = this とします。
 window.addEventListener("dragdrop", this.testfunc, false);

 document.addEventListener("dragover", 関数() {
  コンソールログ(111);
  vm.dt = "ファイルをアップロードするにはここにドラッグしてください";
  コンソールログ(vm.dt);
 });
 },
 メソッド: {
  readFile(ファイル){
   vm = this とします。
   リーダーを新しいFileReader()にします。
   reader.readAsDataURL(ファイル)
   reader.onload = 関数(){
    type = file.type.substr(0,5); とします。
    if(type=="画像"){
     vm.isImage が true である。
     vm.isAudio = false;
     vm.isVideo = false;
    }それ以外の場合(type=="audio"){
     vm.isImage = false;
     vm.isAudio が true である。
     vm.isVideo = false;
    }それ以外の場合(type=="video"){
     vm.isImage = false;
     vm.isAudio = false;
     vm.isVideo が true である。
    }それ以外 {
     警告("画像/ビデオ/音声ではありません")
    }
    vm.srcs = リーダーの結果;
    // this.$nextTick(()=>{
    //
    // })
   }
  },
 testfunc(イベント) {
  アラート("ドラッグドロップ!");
  イベントの伝播を停止します。
  イベントをデフォルトにしない();
 },
 del(インデックス) {
  this.fileList.splice(インデックス、1);
  if (this.fileList.length === 0) {
  this.dt = "";
  }
 },
 tts(e) {
  コンソールログ(e);
  this.dt = "ファイルをアップロードするにはここにドラッグしてください";
 },
 ttrs(e) {
  コンソールログ(e);
  console.log(e.dataTransfer.files);
  datas = e.dataTransfer.files とします。
  datas.forEach(item => {
  this.fileList.push(アイテム);
  });
  this.readFile(this.fileList[this.fileList.length-1])

  e.stopPropagation();
  e.preventDefault();

  this.dt = "アップロードが完了しました。アップロードを続行できます";
 }
 }
};
</スクリプト>

<スタイル スコープ></style>

Vue を使用してデスクトップから Web ページにファイルをドラッグする (画像/オーディオ/ビデオを表示できる) 方法についての記事はこれで終わりです。Vue のファイル ドラッグに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • electron+vue は div コンテンツ編集可能なスクリーンショット機能を実現します
  • Vueは新しいウィンドウを開き、パラメータ転送のグラフィック例を実装します。
  • vue3.0 でカルーセル コンポーネントをカプセル化する手順
  • Vue の基本的な手順の例のグラフィック説明
  • Vue は Ctrip のカルーセル効果を模倣します (スライディング カルーセル、以下は高度に適応)
  • vue+echarts で中国地図のフロー効果を実現する (詳細な手順)
  • vue3 を使用したジグソーパズルゲームのリファクタリングの例
  • Vue で棒グラフを使用し、自分で設定を変更する方法
  • Vueは不規則なスクリーンショットを実装する

<<:  MySQLクエリ結果をCSVにエクスポートする方法

>>:  Alibaba Cloud Server Ubuntu 設定チュートリアル

推薦する

Docker+nacos+seata1.3.0 のインストールと使用設定チュートリアル

これに先立ち、1日かけてやってみました。Seataは使い方が簡単で超シンプルですが、インストールや設...

type=fileファイル変更フォームの名前が正常にエコーされない問題を解決

easyui フレームワークのコードは次のとおりです。 css: .ファイルボックス{ フロート:...

MySQLデータベースを操作するためのコマンドラインツールmycliの簡単な紹介

GitHub にはあらゆる種類の魔法のツールがあります。今日、私はデータベースを操作するためのコマン...

Linux lsコマンドの使用

1. はじめにls コマンドはディレクトリの内容を表示するために使用され、Linux で頻繁に使用さ...

MySQL 変数宣言とストアド プロシージャの分析

変数の宣言グローバル変数の設定@a='新しい変数' を設定します。関数やストアドプロ...

MySql テーブル内の行を削除する実用的な方法

まず、どのフィールドまたはフィールドの組み合わせがデータ行を一意に識別できるかを決定する必要がありま...

ローカルストレージにブール型の値を保存する際の落とし穴を解決する

LocalStorageはブール値を保存します今日、ブール値データを保存するために localsto...

TomcatのmaxPostSize属性を設定する際に注意する必要がある問題を解決する

必要:近い将来、大容量ファイルのアップロード機能を実装します。フロントエンドフレームワークのアップロ...

Oracle VM VirtualBox の CentOS7 オペレーティング システムのインストール チュートリアル図

目次インストール手順環境設定実行構成インストール手順ダウンロードアドレス: バージョン6.0 最初に...

VMware Workstation のインストール (Linux カーネル) Kylin グラフィック チュートリアル

この記事では、VMware WorkstationにKylinをインストールする方法を参考までに紹介...

フロントエンド例外 502 不正なゲートウェイの原因と解決策

目次502 不正なゲートウェイ エラーの発生1. 502 不正なゲートウェイ エラーとは何ですか? ...

フレックスレイアウトにおける画像変形の解決策の詳細な説明

フレックス レイアウトは現在よく使用されるレイアウト方法ですが、場合によっては小さな問題が発生するこ...

NetEase ブログで使用されているシンプルな Web ページ コード

NetEase Blog でコードを使用する方法: まずブログにログインし、ブログのホームページの左...

JavaScriptのアンチシェイクとスロットリングとは

目次1. 関数デバウンス1. 画像安定化とは何ですか? 2. 関数のスロットリング2.1 タイマーの...