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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

4706閲覧

jQueryのanimate速度が微妙にずれてしまう

SaekoIwaki

総合スコア33

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

1グッド

2クリップ

投稿2016/03/13 09:10

お世話におります。jQuery初心者です。
前日にスライドショーをteratailで教えていただきました。
スライドが紙芝居式になっていて、スライドが表示されてる時間までバーが伸び、スライドされると
スライドに合わせてバーが縮む仕組みを作りましたが、どうしてもスライドとバーのdurationにズレが
生じてしまいます。
なぜズレが生じてしまうのでしょうか。また、このズレを解消する方法があれば、ご教授の方よろしくお願いします。

html

<div class="slider"> <div id="rect"> </div> <ul class="slider_road"> <li class="slide"><img src="1.png" class="img1"></li> <li class="slide"><img src="2.png" class="img2"></li> <li class="slide"><img src="3.png" class="img3"></li> </ul> </div>

css

.slider { max-width: 640px; width: 96%; margin: 15px 2%; height: 500px; clear:both; overflow: hidden; position: relative; background-color: #C9E6FD; } #rect { position: absolute; top: 15px; left: 0; background: #87d3ff; width:0px; height: 3px; text-align: center; color: #fff; z-index: 3; } slider_road { position: relative; height: auto; top:30px; margin: 0; padding: 0; list-style: none; } .slide { list-style: none; width: 100%; height:auto; top: 30px; left: 0; float: left; position: absolute; }

js

$(function () { setTimeout('rect()'); //アニメーションを実行 }); function rect() { $("#rect").animate({width: '100%'},3000).animate({width:'0%'},{ duration:1000}); setTimeout("rect()"); } $(function(){ setInterval(function() { var slide = $('.slide'); slide.first().stop().animate({marginLeft:0}); slide.last().stop().animate({marginLeft:'-100%'},1000,function(){slide.last().prependTo(slide.parent())}); }, 3000); //setInterval() });
Odacchi👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

面白いことをしてますね。
それぞれ、別のタイマーを使っていればずれますよ。

Javascript

1window.onload = function(){ 2 $("#rect").stop().animate({width: '100%'},3000); 3 setInterval(function() { 4 $("#rect").stop().animate({width:'0%'},1000); 5 var slide = $('.slide'); 6 slide.first().stop().animate({marginLeft:0}); 7 slide.last().stop().animate({marginLeft:'-100%'},1000,function(){ 8 slide.last().prependTo(slide.parent()); 9 $("#rect").stop().animate({width: '100%'},2000); 10 }); 11 }, 3000); //setInterval() 12};

こうして一つのタイマーの中でやったらどうですか?
動くか検証してませんが・・・

投稿2016/03/13 09:38

編集2016/03/13 13:45
shi_ue

総合スコア4437

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

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

SaekoIwaki

2016/03/13 11:47

前日に引き続き、ありがとうございます。 やはり同じfunction内でやるべきですね。 教えていただきました、方法を実際にしましたら最初の $("#rect").stop().animate({width: '100%'},3000); だけ動いてくれませんでした。 試しに最初からバーがある状態で試したら bar.stop().animate({width:'0%'},1000); はちゃんと効いていて、スライドと同じ速度で 0%になってくれました。 setTimeout('#rect()')等入れたり、var bar = $('#rect')で 試してみましたが、どうしても最初だけ効きませんでした。 どうして最初だけ効かないのか調べる方法等があればご教授の方よろしくお願いします。
shi_ue

2016/03/13 12:14

あ、ダメダメでした。 修正しますね。ちょっとお待ちを。
shi_ue

2016/03/13 12:21

まず、画像が読み込まれなければならないので、起動するのはwindow.onloadにしました。 動きの順序ですが、 ・windowのload時に#rectが伸び始めます。 ・3秒後にintervalが動くと同時に、#rectを1秒かけて戻します。 ・slide.last().stop().animateの動作が終了後、#rectが伸び始めます。 ・以下繰り返し。 てな具合ですが、どうでしょうか。
SaekoIwaki

2016/03/13 13:07

ご教授ありがとうございます。 早速試した所、やはり二枚目から微妙なズレが生じてしまい(2枚から、バーが最後に行く前にスライドしてしまう)、どんどんずれていってしまいます。。。 ふと思ったのですが、本来はスライドが表示されてから最後まで合計4秒かかるのでしょうか。 タイマーで測った所、3枚のスライドが9秒で終わっていましたので、スライドされる1秒が3秒に含まれている為、ずれている。これがずれる理由なんでしょうか。
shi_ue

2016/03/13 13:44

あ、そうですね(笑) setIntevalは3秒おきですが、次の3秒の頭1秒を使ってスライドしますから。
shi_ue

2016/03/13 13:48

最初だけはsetintervalと同じにしなければならないので、3000msですね。
SaekoIwaki

2016/03/13 18:34

ご返事ありがとうございます。 無事にできました!!ほぼ作ってもらった形になってしまいましたが、すごく勉強になりました。 これからスライドボタン等も作る予定なのでもしお時間があったらその時もご教授していただければ幸いです! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問