質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1682閲覧

マウスストーカーをスクロールしても画面のそのままの位置に固定したい。

ukyomas

総合スコア6

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/11/26 10:28

前提・実現したいこと

マウスストーカーを実装していたのですが、スクロールをすると画面外に出てしまい、その位置でマウスを動かすとまた出現します。これを通常のマウスみたいにスクロールしてもその位置に固定したいです。

該当のソースコード

js

1/*======================================= 2 マウスストーカー 3 =========================================*/ 4 5 var 6 cursor = $(".cursor"), 7 follower = $(".follower"), 8 cWidth = 20, //カーソルの大きさ 9 fWidth = 40, //フォロワーの大きさ 10 delay = 10, //数字を大きくするとフォロワーがより遅れて来る 11 mouseX = 0, //マウスのX座標 12 mouseY = 0, //マウスのY座標 13 posX = 0, //フォロワーのX座標 14 posY = 0; //フォロワーのX座標 15 16 //カーソルの遅延アニメーション 17 //ほんの少ーーーしだけ遅延させる 0.001秒 18 TweenMax.to({}, .001, { 19 repeat: -1, 20 onRepeat: function() { 21 posX += (mouseX - posX) / delay; 22 posY += (mouseY - posY) / delay; 23 24 TweenMax.set(follower, { 25 css: { 26 left: posX - (fWidth / 2), 27 top: posY - (fWidth / 2) 28 } 29 }); 30 31 TweenMax.set(cursor, { 32 css: { 33 left: mouseX - (cWidth / 2), 34 top: mouseY - (cWidth / 2) 35 } 36 }); 37 } 38 }); 39 40 //マウス座標を取得 41 $(document).on("mousemove", function(e) { 42 mouseX = e.pageX; 43 mouseY = e.pageY; 44 }); 45 46 $("a").on({ 47 "mouseenter": function() { 48 cursor.addClass("is-active"); 49 follower.addClass("is-active"); 50 }, 51 "mouseleave": function() { 52 cursor.removeClass("is-active"); 53 follower.removeClass("is-active"); 54 } 55 });

html

1<div class="cursor"></div> 2<div class="follower"></div>

css

1.cursor, 2 .follower { 3 border-radius: 50%; 4 position: absolute; 5 top: 0; 6 left: 0; 7 pointer-events: none; 8 } 9 10 .cursor { 11 width: 20px; 12 height: 20px; 13 background-color: #f24e54; 14 z-index: 1001; 15 &.is-active { 16 transform: scale(1); 17 background-color: #f24e54; 18 } 19 } 20 21 .follower { 22 display: flex; 23 justify-content: center; 24 align-items: center; 25 width: 40px; 26 height: 40px; 27 background-color: rgba(#f24e54, .5); 28 z-index: 1000; 29 transition: transform ease .1s; 30 text-align: center; 31 span { 32 display: inline-block; 33 font-size: 14px; 34 font-weight: bold; 35 transform: scale(0); 36 } 37 &.is-active { 38 transform: scale(3); 39 background-color: rgba(#f24e54, .5); 40 } 41 } 42

試したこと

.follower {position: absolute;}を.follower {position: fixed;}にしてみたら、メインビジュアルは理想的な動きになったのですが、下の方にスクロールすると挙動がおかしくなりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

fixed にしたうえで、clientX/clientYを使うことで改善します。

JavaScript

1 //mouseX = e.pageX; 2 //mouseY = e.pageY; 3 mouseX = e.clientX; 4 mouseY = e.clientY;

https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/clientY

投稿2019/11/27 04:32

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問