序文 このプロジェクトでは円形のメニューが必要です。オンラインで検索しましたが、適切なものが見つからなかったので、非常にシンプルなものを自分で作成し、後で最適化します。 このコンポーネントは 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 を使用してフロントエンドのカラーピッカーを実装する方法
インターネット上には、正しい方法であっても、使用しても正しい結果が得られない方法が数多くあります。正...
効果は非常にシンプルで、次のコードを自分のページにコピーして実行するだけです。コードをコピーコードは...
1. MIME: 多目的インターネットメール拡張インペリアル カレッジ オブ コンピュータ オンラ...
序文MySQL バージョン 8.0.23 では、新しい機能「Invisible Column (In...
この記事では、CSSの透明な境界線の背景クリップの素晴らしい使い方を主に紹介し、みんなと共有し、自分...
通常のプロジェクト開発中に、MySQL バージョンが 5.6 から 5.7 にアップグレードされた場...
この記事では、主に次のような Vue ドラッグ アンド ドロップの簡単な実装を紹介します。レンダリン...
最近、プロジェクトに取り組んでいるときに、Web ページ上のキーワードを強調表示する機能に遭遇しまし...
ネットワークリクエストを送信すると、次の保存情報が表示されます。おめでとうございます。ドメインを越え...
目次1. はじめに1.1 Babel トランスコーダ1.2 ポリフィル2. let と const ...
質問Docker が elasticsearch をインストールして起動するときにメモリが不足するシ...
1. 公式ウェブサイトにアクセスして、jdk-8u162-linux-x64.tar.gzなどのLi...
純粋な CSS3 で実装された美しい入力ボックス アニメーション スタイル ライブラリを共有します ...
MySQL をインストールした後、初めてmysql -uroot -pを実行したときに、root パ...
1 はじめにデータベース内のデータを操作するための SQL 文を記述するときに、いくつかの不快な問題...