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

推薦する

CSSテキストシャドウの徐々にぼやける効果の実装

テキストシャドウテキストに影を追加します。テキストとテキスト装飾に複数のシャドウを追加することができ...

MySQL 8.0 の降順インデックス

序文インデックスが順序付けられていることは誰もが知っていると思いますが、MySQL の以前のバージョ...

データバインディングとリストデータの表示にはVue3を使用する

目次1. Vue2との比較1. Vue3の新機能2. Vue2とVue3の応答原理の比較3. 配列の...

CSS3 でクールなスライス画像カルーセル効果を実現

今日は、CSS を使用してクールな画像カルーセル コンポーネントを作成する方法を学びます。その原理は...

Vueプロジェクトはログインと登録の効果を実現します

この記事の例では、ログインと登録の効果を実現するためのvueプロジェクトの具体的なコードを共有してい...

MySQL のインデックス障害の一般的なシナリオと回避方法

序文これまでにも、一部の SQL ステートメントを不適切に使用すると MySQL インデックスが失敗...

MySQL データベース アーキテクチャの詳細

目次1. MySQL アーキテクチャ2. ネットワーク接続層3. データベースサービス層4. 接続プ...

Alibaba Cloud ECSインスタンスのユーザールートパスワードとリモート接続方法を設定する方法

Alibaba Cloud サーバーを購入した後、新しいインスタンスが正常に動作できるようにするには...

Json の長所と短所、使用方法の紹介

目次1. JSONとは何か1.1 配列リテラル1.2 オブジェクトリテラル1.3 混合リテラル1.4...

MySQL の異なるテーブル間でフィールドをコピーする

場合によっては、フィールドから別の新しいフィールドにデータの列全体をコピーする必要があります。これは...

シンプルなカレンダー効果を実現する js

この記事では、シンプルなカレンダー効果を実現するためのjsの具体的なコードを参考までに共有します。具...

HTML初心者や初級者向けの提案。専門家は無視してかまいません。

感想:私はバックエンド開発者です。静的 (HTML) ページを取得すると、ページ構造と命名規則が極端...

大量のデータをMySQLにインポートする際に発生する問題と解決策の分析

プロジェクトでは、SQL を使用してデータ分析を実行するために、大量のデータをデータベースにインポー...

Linux のバックグラウンドで & と nohup を使用する方法

ターミナルやコンソールで作業しているときは、メールを読むなど、もっと重要な作業があるかもしれないので...