1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Webデザインに高校数学が役立つ実例 - 微分で作るドロップダウンメニュー

Posted at

(1年前からずっと下書きだったらしい。そのまま投稿してみる)


数学がわからなくてもプログラムは書けるので、数学なんていらないぜ!という意見をたまに目にします。私もいらないと思います。でも、数学の知識があると、こういう時に役立つよっていう実例を一つ紹介しましょう。すんごいアルゴリズムの話ではないです。誰でもわかる Web デザインの話です。

Web サイトのメニューで、使いづらいやつがよくあります。斜めにマウスを持ってくと閉じちゃうサブメニュー、ありますよね。このツイートを見て思い出しました。

緑の矢印の方にマウスを動かしても大丈夫だけど、赤の矢印の方はサブメニューが閉じる、という実装ですね。下手な実装をすると、緑の方向でもサブメニューが閉じちゃうんですよね。

確かこの記事で後述のライブラリを知った気がします。

なぜAmazonのメガドロップダウンメニューはスムーズに操作できるのかという秘密

image.png

その昔、これを解決する方法を自分で考えた私は、2秒でマウスの座標をwatchするという天才的なアイデアを思いつきました。サブメニューに向かう薄い緑の三角形の中に、マウスの座標があるかどうかを判定すればいいですよね。しかし天才の上には天才がいるものです。

jQuery-menu-aim がその問題をクリアしていたので実装を見た時の話です。

私は、そのシンプルな構造に驚きました。

                function slope(a, b) {
                    return (b.y - a.y) / (b.x - a.x);
                };

これは微分で接線の傾きを求める公式そのままで、みなさん教科書で見たことがあるであろうものです。

image.png

bは今マウスがいる座標で、aはさっき(0.1ms前とかに)マウスがいた座標です。それぞれのx, yの差異を割ることで2つの座標の接線の傾きを求めています。

smart-dropdown-menu さんの gif が三角形がどう動いているのか分かりやすいです。

image.png

そして、それがサブメニューに向かう傾きなのかどうかを調べているだけなのです。座標で判定すると 2次元の判定がいるのでコードはゴミゴミするのですが、傾きは一次元のただの数字なので、 if 傾き in (上の角に向かう傾き, 下の角に向かう傾き) と、たった3つの数字だけで、美しく判定できてしまうのです。

数学が Web デザインにも役立つんだと実感した初めての瞬間でした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?