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 設定チュートリアル

推薦する

Nginx ベースの HTTPS ウェブサイトを設定する手順

目次序文:暗号化アルゴリズム: 1. HTTPS の概要2. NginxはHTTPSウェブサイト設定...

MySQL の NULL と空の文字列

最近、MySQL に触れました。昨日、テーブル構造情報を格納するための新しいテーブルを作成しました。...

Docker クロスサーバー通信オーバーレイソリューション (パート 1) Consul 単一インスタンス

目次シナリオタスクアイデア分析するコンセプトと選択ちょっとしたテスト環境説明予防実践テスト引用シナリ...

Vueのウォッチリスナーの使い方を説明する記事

目次リスナーウォッチ形式リスナーを設定します。要約するリスナーウォッチ関数名は、リッスンする要素の名...

シンプルなスネークを実現するためのネイティブjsキャンバス

この記事では、参考までに、簡単なスネークゲームを実装するためのjsキャンバスの具体的なコードを共有し...

Vue プロジェクトで垂直テーブルを 2 つの方法で実装するアイデアの分析

問題の説明私たちのプロジェクトでは、水平方向のテーブルが一般的ですが、必要に応じて垂直方向のテーブル...

MySQL Limitクエリのパフォーマンスを向上させる方法

MySQL データベース操作では、一部のクエリを実行するときにデータベース エンジンが完全なテーブル...

Webフロントエンド開発におけるエラーを見つけるための基本的な考え方

WEB開発は主に2つのインタラクション(B/Sデータ)から構成されますブラウザ: 1html、css...

Vue3の組み込みコンポーネントであるTeleportの使い方を詳しく説明します

目次1. テレポートの使用2. モーダルダイアログコンポーネントを完成させる3. コンポーネントのレ...

Windows 10 でカスタムドメイン名をバインドするように Hexo と GitHub を構成する方法

Hexo は Windows 10 でカスタムドメイン名を GitHub にバインドしますまずドメイ...

MySQLのインデックスシステムがB+ツリーを使用する理由の分析

目次1. インデックスとは何ですか? 2. インデックスはなぜ必要なのでしょうか? 3. インデック...

Vue が Web オンラインチャット機能を実現

この記事では、Webオンラインチャットを実装するためのVueの具体的なコードを参考までに紹介します。...

JavaScriptはパスワードボックスの検証情報を実装します

この記事では、パスワードボックスの検証情報を実装するためのJavaScriptの具体的なコードを例と...

HTML タグのメタ概要、HTML5 のヘッド メタ属性の概要

序文metaはhtml言語のhead領域にある補助タグです。おそらく、これらのコードは不要だと思うで...

MySQL でデータ復旧に binlog を使用する方法

序文最近、オンラインでデータが誤って操作されました。データベースが直接変更されたため、それを回復する...