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

推薦する

npm 淘宝ミラー変更説明

1. トップレベルの使用法1. cnpmをインストールする npm i -g cnpm --regi...

JavaScript におけるイベント バブリング メカニズムの詳細な分析

バブリングとは何ですか? DOM イベント フローには、イベント キャプチャ ステージ、ターゲット ...

WeChatアプレットはシンプルなチャットルームを実装します

この記事では、WeChatアプレットの具体的なコードを共有し、簡単なチャットルームを実装します。具体...

Javascript を使用して、スライドバー効果のあるスライドナビゲーション プラグインを開発します。

目次1. はじめに2. 使用方法3. 開発プロセス1. モデル例2. イベントとアニメーション4. ...

Nginx における accept lock の仕組みと実装の詳細な説明

序文nginx はマルチプロセス モデルを使用します。リクエストが届くと、システムはプロセスをロック...

ティックアニメーション効果を作成するための svg+css または js

以前、上司からログイン後にチェックマークを表示できるプログラムを作るように言われたのですが、Baid...

新しいウィンドウで開くジャンプメニュー、window.open の使い方の紹介

コードをコピーコードは次のとおりです。 <前> <div> <sele...

Nginx + consul + upsync を使用して動的負荷分散を実現する方法の詳細な説明

目次前提条件DNSドメイン名解決プロセス外部ネットワークマッピングnginxコア知識nginxとはア...

MySQLの関連ロックについての簡単な理解

この記事は主にInnoDBのロックに関する知識を素早く理解してもらうことを目的としています。 Roc...

ウェブサイトのコードブロックのpreタグにコピーコードボタンコードを追加します

他のよりプロフェッショナルなブログ システムを参照すると、コード ブロックにコードのコピー ボタンが...

UrlRewriter のキャッシュ問題と関連する一連の調査

ウェブサイト機能を開発する場合、セッション キャッシュを時間内にクリアできません。一連の探索が始まり...

Nginx は動的と静的の分離を実装します 例の説明

ウェブサイトの解析を高速化するために、動的ページと静的ページを異なるサーバーで解析して、解析速度を向...

モバイルデバイス上のぼやけた小さなアイコンの問題を解決する方法

序文以前、画像とテキストの垂直方向のずれの問題について説明しました。ここで示した小さな例では、小さな...

LeetCode の SQL 実装 (183. 注文をしたことがない顧客)

[LeetCode] 183.注文しない顧客Web サイトに、Customers テーブルと Or...

Linux で Scala 環境を構築し、簡単な Scala プログラムを書く

Linux に Scala 環境をインストールするのは非常に簡単です。Ubuntu 環境であれば、さ...