

jQuery初心者です。
画像が上下にふわふわ動くちょっとしたアニメーションを作りたく思っています。
クリックしたら動作するとかでは無くて、
単にページのアクセントとしてゆらゆら上下に動いているようなものです。
下記のサイトを参考に作成してみましたが、うまくいきません。
■参考にしたサイト(Gimmick logさん)
http://gimmicklog.main.jp/jquery/212/
↑↑これの「上下に動かす」にトライしています。
※参考サイトのデモは当方環境で問題無く動作しています。
記述は下記の通りです。
HTML
=====
<div>
ああああああああああああああああああ・・・
<p><img src="yurayura.jpg" alt="ゆらゆら画像" width="100" height="100"></p>
</div>
=====
CSS
=====
div{
position:relative;
}
p{
position:absolute;
right:0;
top:0;
}
=====
下記ソースですとまったくアニメーションしません。
=====
$(function(){
setTimeout("yurayura()");
});
function yurayura(){
$("p").animate({
marginTop:"10px"
},800).animate({
marginTop:"-10px"
},800);
setTimeout("yurayura()",1600);
}
=====
「SetTimeout」部分を省いて
下記記述にすると、ループはしませんが上下に1回だけ動きます。
=====
$("p").animate({
marginTop:"10px"
},800).animate({
marginTop:"-10px"
},800);
=====
↑↑↑これを何とかループさせたいです。
■環境
・jQuery ver. 2.1.3
・Firefox最新版で確認
かなりの素人で申し訳ありませんが
どうぞよろしくお願い申し上げます。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
回答の内容を書いてください参考サイトとご質問文にご提示のスクリプトでは
'-=10px'、'+=10px' //増減指定
"10px"、"-10px" //絶対値指定
などの違いがありますが、ご提示のものを正として・・・
少し視点を変えて、以下の点を修正してみました。
1)対象要素の特定は"p"のみだと、全てのp要素が対象となって
しまうので、限定の意味でクラスを設定。
2)時間指定(800+800=1600)のような管理方法だと誤差が積み
重なる恐れがあるので、callbackを利用して順序で制御。
(ご提示の例の場合は誤差が重なっても、jQueryが内部で管理
しているので、問題は出ないと思いますが)
3)上記の結果、setTimeout()は用いない形式で記述
4)CSSで指定していないmarginTopではなく、topの値を用いて制御
ということで、以下のような感じではいかがでしょうか?
※ このままだと最初の1/4サイクルのみ1/2の速度になっていますが、
改良する方法も考えてみてください。
(全角空白は半角に)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>test</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
div{ position:relative; }
p.yurayura{ position:absolute; right:0; top:0; }
</style>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery","1");</script>
<script type="text/javascript">
$(function(){
var amplitude = 10; //1/2振れ幅
var duration = 800; //1/2サイクル(mmSec)
var target = $("p.yurayura"); //対象要素
var flick = function(){
amplitude *= -1;
target.animate({ top : amplitude }, duration, flick);
}
flick();
});
</script>
</head>
<body>
<div>
ああああああああああああああああああ・・・
<p class="yurayura">
<img src="yurayura.jpg" alt="ゆらゆら画像" width="100" height="100">
</p>
</div>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- HTML・CSS 吹き出し 下記の吹き出しのスタイルシートについて 下記のスタイルシートは左側にアイコンがでる使用にな 1 2022/11/12 17:55
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のページから移動してきた...
-
【javascript クロスブラウザ...
-
「jQuery」アニメーションをル...
-
javascriptでページ内の一部分...
-
画像ファイルのアドレスに今日...
-
JavaScriptを有効にする文言を...
-
<a href="#" …>の意味を教えて...
-
スマホ上で、左右スワイプで次...
-
Javascriptのクエリ(パラメー...
-
mailto + 変数名
-
bodyタグのfocus
-
別ページのページ内リンクでの...
-
JAVA HTML スライドするアン...
-
SCRIPT5007: 未定義または NULL...
-
新しい子ウィンドウを開くと古...
-
別ファイルのfunctionの読み込み方
-
入力したテキストボックスのデ...
-
jQuery 読み込んだ外部htmlフ...
-
スクロールの同期ってできますか?
-
jQuery ツールチップの中のリンク
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでalertの文字列をコ...
-
【javascript クロスブラウザ...
-
特定のページから移動してきた...
-
onLoadをbodyタグ以外で使用する
-
指定の年月日時にcssを自動で切...
-
画像ファイルのアドレスに今日...
-
オブジェクトを指定してくださ...
-
JavaScript で指定した月日に別...
-
楽天商品検索APIをjavascriptで...
-
iframe内をリロードできますか?
-
ブラウザーのバージョンによる...
-
セキュリティ保護の警告が出な...
-
javascriptでページ内の一部分...
-
javascriptにてonclickを無効
-
<body>内のJavascriptでCSSを読...
-
「jQuery」アニメーションをル...
-
innerHTMLが動作しない。
-
1 ~ Nまでの整数の総和(1+2+3....
-
ブラウザをJavaScriptで最小化…
-
JavaScriptがoffならば、ページ...
おすすめ情報
早々に回答いただき本当に感謝です。
記述していただいたソースで動作しました。素晴らしいです。
※ちなみにHTMLやCSSは質問しやすいように最低限にしていました。本当はpにclass指定しています。
おっしゃる通り、最初のみ増幅が二倍となっているようですが、それも特に気にならないです。
ただ、参考サイトの他の効果(左右に動かすや透過の制御)も使ってみたいと思っているのですが
いただいたソースを理解し、応用するには私には難易度が高いです。
(今後、ちょっとずつ読み解きながら勉強するようにいたします。申し訳ございません。
ご指摘の時間指定の誤差の積み重なり等も本来なら意識すべきなのだと思います。)
「No.1様への補足その2」
ちなみにご質問いただいた参考サイトとの誤差については
最初は参考サイト通り、「増減指定」にしていたのですが、
「絶対値指定」の方でも同様に動作する(1回だけ)のを確認してそのままにしていました。
説明不足で申し訳ありません。
どちらを記述しても同じ挙動です。(←1回だけアニメーションしてストップ)
現状、参考サイトと当方ページのソースや環境にどのような差があるのかがわからずにいます。
当方の希望が参考サイトと同じソースで・・・というワガママなものになると
実際ページを見ていただくしかないのかもしれませんよね。。。