序文 このプロジェクトでは円形のメニューが必要です。オンラインで検索しましたが、適切なものが見つからなかったので、非常にシンプルなものを自分で作成し、後で最適化します。 このコンポーネントは 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. フックとは何ですか? 2. フックはなぜ現れるのでしょうか? 3. よく使われるフックは何...
Docker の基本的な操作を学習した後、コンテナにいくつかの基本的なアプリケーションをデプロイして...
tomcat を https アクセスに対応させる方法ステップ: (1)キーストアファイルを生成する...
目次1. 解体のヒント2. デジタルセパレーター3. try...catch...finally が...
目次1. 覚えておくべき知識1. 変数タイプ2. シェル変数の説明3. シングルクォート、ダブルクォ...
固定サイドバーを実装するにはJavaScriptを使用します。参考までに、具体的な内容は次のとおりで...
目次ネイティブJavaScriptとはA. 新しいブラウザでnullオブジェクトをチェックするコンス...
Lottie は、Airbnb が開発した iOS、Android、React Native 向けの...
序文偶然、30 分の Tomcat セッション時間は、セッションが作成された後、30 分間のみ有効で...
目次なぜパーティションが必要なのでしょうか?パーティショニング戦略パーティションの危険性なぜパーティ...
1 つのサーバー上で 3 つの MySQL インスタンス プロセスが開始され、それぞれ異なるポート ...
クイックスタートガイドForeman インストーラーは、完全に機能する Foreman セットアップ...
Sttty は、Linux で端末設定を変更および印刷するための一般的なコマンドです。 1. パラ...
MySql でリモート接続を許可する方法この目標を達成するには、2つのことを行う必要がある。ユーザー...