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

推薦する

Vueナンバープレート検索コンポーネントの使い方の詳しい説明

参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...

2時間のDocker入門チュートリアル

目次1.0 はじめに2.0 Dockerのインストール3.0基本的なDockerコマンド4.0 Do...

MySQL 圧縮の使用シナリオとソリューション

導入圧縮トランスポート プロトコル、圧縮列ソリューション、圧縮テーブル ソリューションなど、MySQ...

vue+echartsチャートの使用に関する問題記録

序文echarts は私が最もよく使用するチャート作成ツールであり、非常に完全なエコシステムとコンテ...

mysql8.0.11 winx64 インストールと設定のチュートリアル

mysql 8.0.11 winx64のインストールチュートリアルは以下のように記録され、みんなと共...

HTML での位置の使用に関する簡単な紹介

昨日 HTML を少し学んだばかりで、JD.com の検索バーを作るのが待ちきれませんでした。 作っ...

Baota LinuxパネルにFTP接続できない問題の解決方法の詳細な説明

Alibaba Cloud Server を使用している場合は、セキュリティ グループ設定でポート ...

Docker Alpine イメージのタイムゾーン問題に対する完璧な解決策

最近、Docker を使用して Java アプリケーションをデプロイしていたときに、タイムゾーンが間...

Linuxのファイル操作の知識ポイントを詳しく解説

ファイル操作に関連するシステムコール作成するint creat(const char *ファイル名,...

Tomcat の文字化けしたコードとポート占有の解決方法について簡単に説明します

Tomcat サーバーは、無料でオープン ソースの Web アプリケーション サーバーです。軽量のア...

v-model 双方向バインディングデータを実装する vue カスタム コンポーネントのサンプル コード

プロジェクトでは、プロジェクトが呼び出すカスタム パブリック コンポーネントに遭遇します。通常、pr...

Ubuntu 18.04 システムでの Redis および phpredis 拡張機能のインストールと設定の詳細な説明

この記事では、Ubuntu 18.04 に Redis と phpredis 拡張機能をインストール...

グリーンスタイルのウェブデザイン作品18点の最新コレクション

トイ・ストーリー3 オンラインマーケティングウェブサイトゼンモバイル鉄から鉄へスプラウトファンドバー...

docker リモート API のワンクリック TLS 暗号化の実装

目次1. Docker の 2375 ポートを別のポートに変更します。これは一時的な対策にすぎません...

スマートCSSを使用して、ユーザーのスクロール位置に基づいてスタイルを適用します。

現在のスクロール オフセットを html 要素の属性に追加することで、現在のスクロール位置に基づいて...