この記事では、モバイルと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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明
>>: Idea で Docker を使用して SpringBoot プロジェクトをデプロイする詳細な手順
公式サイトからインストールパッケージをダウンロードします: mysql-8.0.19-linux-g...
DOMContentLoaded イベント文字通り、DOM がロードされた後に実行されます。 win...
1. 絶対配置レイヤーの隣接フローティング レイヤーの幅が親レイヤーの幅と等しくなく、フロートがクリ...
idea を使用して JSP ファイルを書き込む前に、jdk 環境 (ここでは説明しません) と対応...
データ移行は、MySQL から ClickHouse にインポートする必要があります。概要プランは以...
目次序文関連資料Vue プロジェクトが 2 次元ハイパーグラフを導入ハイパーグラフ 2D ケース引用...
1. 行の形式は何ですか? MySQL の行形式の設定は次のように表示されます。 実際、MySQL ...
目次序文データのシミュレーション結合されたデータ合併のアイデアコードの表示と分析最初のステップステッ...
目次プレハブプレハブの作り方プレハブの役割1. 同じタイプのノードをバッチで作成する2. 特定の時間...
以下は、B+ ツリーのデータ構造と実験結果からの推測に基づいた私の判断です。間違いがあればご指摘くだ...
今日、Tomcat サーバーの設定時にちょっとした問題が発生したので、参考までにいくつかご説明したい...
CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...
コンセプトインデックスにクエリ要件を満たすすべてのデータが含まれている場合、それはカバーリング イン...
ドキュメントはしばらく前から書いていましたが、アップロードする勇気がありませんでした。サーバーのセキ...
このチュートリアルでは、ウェブデザインにおけるFORMフォームタグのさまざまな属性の応用を紹介します...