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 で Maven プロジェクトをより速くビルドする

目次I. 概要2. 従来の多段階イメージ構築3. Buildkitを使用してイメージをビルドする4....

Vue3+Element+Tsは、フォームの基本的な検索リセットやその他の機能を実装します

Vue2 の記述スタイルから Vue3 の形式に切り替えると、記述スタイルとコード構造にいくつかの変...

マウスの尾行効果を実現する JavaScript

マウス効果では、setTimeout を使用して固定時間にノードを生成し、ノードを削除し、生成された...

MySQL データ型の最適化の原則

MySQL は多くのデータ型をサポートしており、高パフォーマンスを得るには適切なデータ型を選択するこ...

Nginxはhttpとhttpsの両方のアクセスをサポートするために同じドメイン名を設定します

Nginx は同じドメイン名で構成されており、http と https の両方でアクセスできます。証...

React 構成 px 変換 rem メソッド

関連する依存関係をインストールするnpm i lib-flexible --save npm i p...

Hadoop 3.2.0 クラスターの構築に関する一般的な考慮事項

1つのポートの変更バージョン 3.2.0 では、ネームノード ページ ポートは 9870、データノー...

Nodejs での WeChat アプレット メッセージ プッシュの実装

サブスクリプションメッセージテンプレートを選択または作成するWeChat アプレットにログインし、「...

Puppeteer を使用して Linux (CentOS) で Web ページのスクリーンショット機能を実装する

Linux に puppeteer をインストールするときに、次の問題が発生する可能性があります。こ...

Electronで不規則な形状の透明部分をクリックする実装

目次不規則なフォームの実装透明な部分をクリックする不規則なフォームの実装ここでは円形フォームを実装し...

MySQLは適切なストレージエンジンを選択します

データベースに関して最もよく聞かれる質問の 1 つは、現在のビジネス ニーズを満たす MySQL の...

IMG での UserMap の使用例

usemap は <img> タグの属性であり、使用するイメージ マップの名前を指定する...

Ubuntu 18.04 LTSでIPアドレスを設定するための完全な手順

序文Ubuntu 18.04 LTS で IP アドレスを設定する方法は、これまで使用されていた設定...

Alibaba Cloud Centos7.3 インストール mysql5.7.18 rpm インストール チュートリアル

MariaDBをアンインストールするCentOS7 ではデフォルトで MySQL の代わりに Mar...