Typescript+React でモバイルと PC でシンプルなドラッグ アンド ドロップ効果を実現

Typescript+React でモバイルと PC でシンプルなドラッグ アンド ドロップ効果を実現

この記事では、モバイルとPCで簡単なドラッグアンドドロップ効果を実現するためのTypescript + Reactの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

1. モバイル

1.tsxコード

「react」からコンポーネントをインポートします。
'./Tab.less' をインポートします
インターフェースProps{
 
}
インターフェースユーザー{
    id: 文字列、
    テキスト: 文字列
}
インターフェースコンテンツ{
    id: 文字列、
    テキスト: 文字列
}
インターフェース状態{
    ボタンインデックス: 数値、
    ボタン配列: user[],
    コンテンツ配列: コンテンツ[]
}
クラスTabはComponent<Props, State>を拡張します{
    コンストラクタ(props: Props) {
        スーパー(小道具)
        この状態 = {
            ボタンインデックス: 0,
            ボタン配列: [
                {
                    id: '01',
                    テキスト: 'ボタン 1'
                },
                {
                    id: '02',
                    テキスト: 'ボタン 2'
                },
                {
                    id: '03',
                    テキスト: 「ボタン3」
                }
            ]、
            コンテンツ配列: [
                {
                    id: 'c1',
                    テキスト: 'コンテンツ 1'
                },
                {
                    id: 'c2',
                    テキスト: 'コンテンツ 2'
                },
                {
                    id: 'c3',
                    テキスト: 'コンテンツ 3'
                }
            ]、
        }
    }
    FnTab(インデックス: 数値):void {
        this.setState({
            ボタンインデックス: インデックス
        })
    }
    与える() {
        戻る (
            <div className='タブ'>
                {
                    this.state.ButtonArray.map((item, index) => <button key={item.id} onClick={this.FnTab.bind(this, index)} className={this.state.ButtonIndex === index ? 'tab-button ac' : 'tab-button'}>{item.text}</button>)
                }
                {
                    this.state.ContentArray.map((item, index) => <div key={item.id} style={{display:this.state.ButtonIndex===index?'block':'none'}} className='tab-content'>{item.text}</div>)
                }
 
            </div>
        )
    }
}
デフォルトタブをエクスポート

2.cssコード

.ドラッグ{
    位置: 絶対;
    幅: 100ピクセル;
    高さ: 100px;
    背景色: 赤;
}

2. パソコン

1.tsxコード

'react' から { Component, createRef } をインポートします。
'./index.less' をインポートします
インターフェースProps{
 
 
}
インターフェース状態{
 
 
}
クラス TextDrag は Component を拡張します {
  disX: 数値 = 0
  disY: 数値 = 0
  x: 数値 = 0
  y: 数値 = 0
  ドラッグ要素 = createRef<HTMLDivElement>()
  コンストラクタ(props: Props) {
    スーパー(小道具)
    この状態 = {
 
 
    }
  }
  FnDown(ev: React.MouseEvent) {
    if (this.dragElement.current) {
      this.disX = ev.clientX - this.dragElement.current?.getBoundingClientRect().left
      this.disX = ev.clientY - this.dragElement.current?.getBoundingClientRect().top
    }
    document.onmousemove = this.FnMove.bind(これ)
    document.onmouseup = this.FnUp
  }
  FnMove(ev: マウスイベント) {
    this.x = ev.clientX - this.disX
    this.y = ev.clientY - this.disY
    if (this.dragElement.current) {
      this.dragElement.current.style.left = this.x + 'px'
      this.dragElement.current.style.top = this.y + 'px'
    }
  }
  FnUp() {
    ドキュメント.onmousemove = null
    document.onmouseup = null
  }
  与える() {
    戻る (
      <div className="TextDrag" ref={this.dragElement} onMouseDown={this.FnDown.bind(this)}> </div>
 
 
    )
  }
}

デフォルトのTextDragをエクスポート

2.cssコード

.テキストドラッグ{
    位置: 絶対;
    幅: 100ピクセル;
    高さ: 100px;
    背景色: 赤;
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ドラッグ可能で編集可能なガントチャートの詳細な説明(HighchartsはVueとReactで使用できます)
  • react-beautiful-dnd はコンポーネントのドラッグ アンド ドロップ機能を実装します
  • react-beautiful-dnd を使用してリスト間のドラッグ アンド ドロップを実装する
  • Reactドラッグフックを実装するための100行以上のコード
  • React.js コンポーネントはドラッグ アンド ドロップによるソート コンポーネント機能のプロセス分析を実装します
  • ドラッグアンドドロップ機能を実装するReactサンプルコード
  • React.js コンポーネントはドラッグ アンド ドロップ コピーとソート可能なサンプル コードを実装します
  • React.jsがネイティブjsドラッグエフェクトを実装することで発生する一連の問題についてもう一度話しましょう
  • React.js をベースにしたネイティブ js ドラッグ エフェクトの実装に関する考察
  • Reactはシンプルなドラッグアンドドロップ機能を実装します

<<:  MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明

>>:  Idea で Docker を使用して SpringBoot プロジェクトをデプロイする詳細な手順

推薦する

LinuxサーバーでRabbitMQ管理ページにアクセスできない問題を解決

私のプロジェクトの特定の機能ではサーバーが rabbitmq にメッセージを送信する必要があるため、...

Yahooが開発したウェブページスコアリングプラグインYSlowのスコアリングルール

YSlow は、Yahoo USA が開発したページ スコアリング プラグインです。非常に優れていま...

CSS ウェイト値(カスケード)の例の詳細な説明

•CSSには多くのセレクターがあります。複数のセレクターを同じ要素に適用するとどうなるでしょうか? ...

MySQL接続クエリの原理と応用

概要MySQL の最も強力な機能の 1 つは、データ取得を実行しながらテーブルを結合できることです。...

高性能なウェブサイトのための14のテクニック

オリジナル: http://developer.yahoo.com/performance/rule...

Linux で毎日データベースの自動バックアップを設定する方法

この記事では、Centos7.6 システムと Oracle11g を例に挙げます。 1. まずデータ...

Zabbix で Windows のパフォーマンスを監視する方法

背景情報最近、Windows パフォーマンスに関する本を読み直しています。以前は SCOM 監視を使...

MySQL 5.7.16 ZIP パッケージのインストールと設定のチュートリアル

この記事では、MySQL 5.7.16 ZIPパッケージのインストールと設定のチュートリアルを参考ま...

Vue-cli4 ルーティング構成の詳細な理解

目次序文 - Vue ルーティング1. 最も基本的なルーティング構成1. router/index....

Linuxコマンド履歴の調整方法の詳細な説明

Linux システムの bash history コマンドは、以前に実行したコマンドを記憶し、再入力...

ES6実装クラスのプライベート変数の書き方をいくつか詳しく説明します

プライベート変数のクロージャ実装プライベート変数は共有されないnew キーワードにより、 perso...

W3C チュートリアル (2): W3C プログラム

W3C 標準化プロセスは 7 つの異なるステップに分かれています。 W3C 標準化プロセスは 7 つ...

VUEはG2チャートを使用した実装を導入します

目次G2チャートについて使用テンプレートで使用される完全なコード (棒グラフ)世界地図を追加するG2...

訪問者を惹きつけるウェブサイトコンテンツを作成する14の方法

ネットサーフィンをしていると、私の注意を引こうとする美しいグラフィックでいっぱいの Web サイトを...

VMware Workstation 15 Pro インストール ガイド (初心者向け)

01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...