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 プロジェクトをデプロイする詳細な手順

推薦する

MySQL 8.0.19 インストールチュートリアル

公式サイトからインストールパッケージをダウンロードします: mysql-8.0.19-linux-g...

JavaScript DOMContentLoaded イベントのケーススタディ

DOMContentLoaded イベント文字通り、DOM がロードされた後に実行されます。 win...

IE6/7 で絶対配置された要素が不可解に消えたりブロックされたりする問題を解決する方法

1. 絶対配置レイヤーの隣接フローティング レイヤーの幅が親レイヤーの幅と等しくなく、フロートがクリ...

IDEA を使用して Tomcat を設定し、JSP ファイルを作成する方法

idea を使用して JSP ファイルを書き込む前に、jdk 環境 (ここでは説明しません) と対応...

MySQLからClickHouseに移行する5つの方法

データ移行は、MySQL から ClickHouse にインポートする必要があります。概要プランは以...

Vue で SuperMap を使用する練習

目次序文関連資料Vue プロジェクトが 2 次元ハイパーグラフを導入ハイパーグラフ 2D ケース引用...

MySQLデータ行と行オーバーフローのメカニズムの詳細な説明

1. 行の形式は何ですか? MySQL の行形式の設定は次のように表示されます。 実際、MySQL ...

JSはマップを使用してdouble配列を統合します

目次序文データのシミュレーション結合されたデータ合併のアイデアコードの表示と分析最初のステップステッ...

cocoscreatorプレハブの詳しい説明

目次プレハブプレハブの作り方プレハブの役割1. 同じタイプのノードをバッチで作成する2. 特定の時間...

大規模な MySQL テーブルに対する count() の実装を最適化しました

以下は、B+ ツリーのデータ構造と実験結果からの推測に基づいた私の判断です。間違いがあればご指摘くだ...

Tomcat サーバーが tomcat7w.exe を開けない場合の解決策

今日、Tomcat サーバーの設定時にちょっとした問題が発生したので、参考までにいくつかご説明したい...

CSSスプライトの応用の詳細な説明

CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...

MySQLカバーインデックスの詳しい説明

コンセプトインデックスにクエリ要件を満たすすべてのデータが含まれている場合、それはカバーリング イン...

Win2008 サーバー セキュリティ チェック手順ガイド (日常のメンテナンス手順)

ドキュメントはしばらく前から書いていましたが、アップロードする勇気がありませんでした。サーバーのセキ...

HTML フォームタグチュートリアル (2):

このチュートリアルでは、ウェブデザインにおけるFORMフォームタグのさまざまな属性の応用を紹介します...