序文 このプロジェクトでは円形のメニューが必要です。オンラインで検索しましたが、適切なものが見つからなかったので、非常にシンプルなものを自分で作成し、後で最適化します。 このコンポーネントは react に基づいていますが、原理は同じです。 拡張効果は以下のとおりです。 成し遂げる css(レス) @centerIconサイズ: 30px; .flex(@justify: flex-start, @align: center) { コンテンツの正当化: @justify; 項目の位置を揃える: @align; ディスプレイ: フレックス; } .sector-menu-wrapper { 位置: 相対的; 幅: @centerIconSize; マージン: 自動; .center-icon { .flex(中央); 幅: @centerIconSize; 高さ: @centerIconSize; 境界線の半径: 50%; 背景: rgba(0, 0, 0, 0.3); 色: 白; カーソル: ポインタ; } .セクター項目{ 位置: 絶対; .flex(中央); 幅: @centerIconSize; 高さ: @centerIconSize; 境界線の半径: 50%; 背景: rgba(0, 0, 0, 0.3); カーソル: ポインタ; 色: 白; 上: 0; 左: 0; 遷移: すべて線形 0.5 秒。 変換: translate(0, 0); // 表示: なし; 可視性: 非表示; } .セクターリスト{ &.セクターリストアクティブ{ 遷移: すべて線形 0.5 秒。 .セクター項目{ .flex(中央); 遷移: すべて線形 0.5 秒。 変換: translate(0, 0); 可視性: 可視; &:最初の子 { 変換: translate(0, -@centerIconSize * 1.5); } &:n番目の子(2) { 変換: translate(-@centerIconSize * 1.5, 0); } &:n番目の子(3) { 変換: translate(0, @centerIconSize * 1.5); } } } } } セクターメニュー.js 'react' から React をインポートします。 エクスポートデフォルトクラスSectorMenuはReact.Componentを拡張します{ 状態 = { 方向: '左'、 セクターメニュー表示: false、 センターアイコンサイズ: 30, セクターアイテムサイズ: 30, } /** * ラジアルメニューを表示 */ セクターメニューを表示 = () => { const { セクターメニュー表示 } = this.state; this.setState({ セクターメニュー表示: !セクターメニュー表示, }) } onClickSectorMenuItem = (インデックス) => { const { セクターメニュー項目関数 } = this.props; if (!sectorMenuItemFunctions || typeof(sectorMenuItemFunctions[index]) !== 'function') { 戻る; } セクターメニュー項目関数[インデックス](); } getSectorJsx = () => { const { セクターメニュー項目 } = this.props; if (!sectorMenuItems || !Array.isArray(sectorMenuItems) || sectorMenuItems.length === 0) { 戻る; } const スタイル = {}; const { セクターメニュー表示 } = this.state; セクターメニューアイテム.map((item, i) => { を返す // 定数スタイル = { // 変換: translate(0, -centerIconSize * 2); // }; 戻り値 (<div className={`sector-item ${sectorMenuVisible && 'sector-item-active'}`} スタイル={スタイル} onClick={() => this.onClickSectorMenuItem(i)} キー={i} > {アイテム} </div>) }); } 与える() { const { セクターメニュー表示 } = this.state; 戻る ( <div className="セクターメニューラッパー"> <div className="center-icon" onClick={this.showSectorMenu}> { セクターメニュー表示? 'x' : '···' } </div> <div className={`sector-list ${sectorMenuVisible && 'sector-list-active'}`}> セクションJsxの取得 </div> </div> ) } } 電話 <セクターメニュー セクターメニュー項目={['A1', 'A2', 'A3']} セクターメニュー項目関数={[関数() {console.log(0)}, 関数() {console.log(1)}, 関数() {console.log(2)}]} /> 期待する もともと柔軟なディストリビューションを書きたかったのですが、位置の計算方法で行き詰まってしまいました。プロジェクトの時間が限られているので、別の日に時間を見つけて最適化します。
落とし穴 遷移アニメーションは、sector-item クラスで display:none を使用したために機能しなかったことに気付きました。代わりに visibility プロパティを使用する必要がありました。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 |
<<: 選択ドロップダウンボックスの値をIDに渡してコードを実装する方法
>>: react-color を使用してフロントエンドのカラーピッカーを実装する方法
目次NFS サービスの概要NFS とは何ですか? NFS マウントの原則NFS サーバーはデータ転送...
COALESCE は、各パラメータ式 (expression_1、expression_2、...、...
目次1. ループオブジェクト内の値2. ループオブジェクト3. キーと値のループ1. ループオブジェ...
述べる:この記事で扱うデータ量は 100 万です。数千万のデータが必要な場合は、量を増やすだけで済み...
この記事では、LinuxシステムのVMwareインストールの具体的な手順を参考までに紹介します。具体...
遅い問題を完全に解決したい場合は、MySQL を MySQL 8.0 にアップグレードすることをお勧...
まずMySQLのインストールMySQLソフトウェアをダウンロードし、インストールパスを変更しますMy...
<br />著者はかつてWebデザインの初心者でしたが、継続的な探求と実践を通じて、今で...
この記事では、アンカー配置を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は...
サーバーも 2 つあります。準備:コンテナのホスト名を設定する consul: kv タイプのストレ...
「初心者向けソースコードからの MySQL デッドロック問題の理解」では、MySQL ソースコードを...
Vue スキャフォールディングでは、エントリ ファイル main.js の新しい Vue コードに、...
1. 一般的なMySQLの設定以下のすべての構成パラメータは、32G のメモリを搭載したサーバーに基...
コンピューターにmyeclipse2017とidea2017がインストールされているため、ideaが...
表示する svg 画像を追加すると、React はファイルが見つからないというメッセージを表示します...