jquery cycleで画像リサイズ

このQ&Aのポイント
  • jquery cycleを使用して、画像スライドを行いたいが、画像のサイズが異なるため、画像の比率を固定して画面に合わせた表示を行いたい。
  • 現在、スライドする画像のサイズを取得し、縦横どちらかが大きい方に合わせてリサイズしているが、idがslide1の場合にしかリサイズが行われず、それ以降の画像はリサイズされない。
  • jquery cycle pluginでは、画像の個別のリサイズは行えないため、他の方法を検討している。
回答を見る
  • ベストアンサー

jquery cycleで画像リサイズ

jquery cycle pluginを使用して、画像のスライドをしています。 画像を画面中央に全画面表示をしたいのですが、 スライドする画像のサイズがそれぞれ異なるため、 画像の比率を固定して、縦横のサイズで大きい方を 画面に合わせて表示したいのです。 私が考えたのは、 (全文は載せられません。すみません。) <div id="slideImage"> <img id="slide1" src="test01.gif"> <img id="slide2" src="test02.gif"> ・・・ <img id="slide5" src="test05.gif"> </div> ↑のようにスライドする画像があるとして、 下記のjavascriptでスライドする画像分ループさせて、 id部分を変数にして、縦横どちらかが大きかったら・・・という 計算をしています。 function resize(){ for(var i=1; i<6; i++){ var slideNo = "slide" + i; var w = document.getElementById(slideNo).width; var h = document.getElementById(slideNo).height; if(w >= h){ document.getElementById(slideNo).width = screen.width; }else{ document.getElementById(slideNo).height = screen.height; } } } 確かにこれだとidがslide1の場合はサイズをリサイズしてくれるのですが、 slide2以降をリサイズしてくれません。 ループは確かに回っているし、 if文の前でリサイズ前の画像サイズをちゃんと取得しているのですが、 なぜかscreen.width(screen.height)の値が入ってくれません。 jquery cycle pluginだとそれぞれの画像のリサイズはできないのでしょうか。 みなさんお力お貸しください!!

質問者が選んだベストアンサー

  • ベストアンサー
  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.4

>やはり左側に200px程の余白が空きます。 .cycle()を呼び出した時点でIMG要素に position: absolute; left: 0px; が追加されるからではないでしょうか。 どういうスライドショーにしているかわかりませんが、 jquery cycle pluginでは目的の実装は難しそうですね。

ilovecupnoodle
質問者

お礼

そうなのですね。 あと少しだと思ったのですが、 悔しいですね。。 本当にありがとうございました。

その他の回答 (3)

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.3

>画像を画面中央に表示する方法を今度は探すことになりました。。 ああ、画面中央よりにしたいんですね。 >なんとなくモニタをたてがたのものに変えたところきれいに >画面に収まりました。 CSS情報が一切ないので把握できづらいですが、 そもそもscreen.widthではなく、 BODYのサイズを測ったほうがいいのでは? body,html{margin:0px;} として、 $("body").width() $("body").height() で画像のサイズを決定。 スクロールバーは常に表示として、 width()を指定した時に、スクロールバーの幅を引いてあげる。 これで全体表示がうまくいくように思います。

ilovecupnoodle
質問者

補足

>ああ、画面中央よりにしたいんですね。 画像を縦横比で固定して表示すると、もし幅の方が大きい画像の場合、 高さは画面サイズに合わされないので、画面上寄りで 表示されますよね? なので、それを中央にしたいのです。。 CSSでは text-align:center; margin-left: auto; margin-right: auto; を指定していましたが、やはり左側に200px程の余白が空きます。 ためしに margin-left:-200px;を入れると 横長画像はきれいに画面におさまります。 (縦長画像はずれます。) >$("body").width() >$("body").height() 上記を試してみたのですが、 スクロールしてもやはり左側にだけ無駄な余白が残っていました。 1度、横長画像なら以下のように var yohaku = (screen.height - document.getElementById(slideNo).height)/2; document.getElementById(slideNo).vspace = yohaku; 画面の高さから画像の高さを引いて、 でた値を画像の余白で設定しようと思ったのですが、 画像を画面サイズで拡大しているので、 拡大後のサイズではなく、画像本来のサイズが取れてしまいます。 色々分かりにくくてすみません。

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.2

>けれど、どの画像も表示位置が右寄りになってしまい、 >左側に3cmくらいのスペースが必ず開くようになってしまいました。。 それはCSSの問題では? すでにされているCSS指定に原因があるのでしょうが、 CSS部分は提示されていないので。 #slideImage{ text-align: left; margin-left: 0; }

ilovecupnoodle
質問者

補足

最初、cssには何も記載していなかったので、 上記のmarginをautoにしたり、margin-leftの設定を 色々変更したのですが変わらずでした。 なんとなくモニタをたてがたのものに変えたところきれいに 画面に収まりました。 これは一体(笑)

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.1

試してみましたが、サイズは変わりました。 resize()を呼び出してないだけってことはないですよねえ? $(function() { resize(); $('#slideImage').cycle('command'); });

ilovecupnoodle
質問者

お礼

解決、とした後ですがご報告します。 スライドが中心に寄らないということでしたが、 画像のリサイズ後に余白部分のピクセルを計算して、 vspace,hspaceとして入れることで無事中央寄せができるようになりました! 上記の過程で画像の左側のスペースの問題も解決できました!! mikemike7様、本当にありがとうございました!!><

ilovecupnoodle
質問者

補足

resize()をonloadイベントで呼び出していたため、 上記に変更したところ無事リサイズすることができました。 ありがとうございます! けれど、どの画像も表示位置が右寄りになってしまい、 左側に3cmくらいのスペースが必ず開くようになってしまいました。。 画像を画面中央に表示する方法を今度は探すことになりました。。

関連するQ&A

  • 同じページで画像をリサイズする方法を教えてください。

    お忙しい中お読み頂きありがとうございます。 javascriptで、その場でアップロードした画像を リサイズして表示するスクリプトを作っているのですが、 どうしても解決できない問題があります。 【問題】 最初に画像をアップロードした時の画像サイズが、 もう一度アップロードした時に反映されてしまうのです。 (あるいは最初の画像サイズが指定したサイズにならない) onChangeで読み込んでいるのが原因かも知れませんが、 どんなに調べても対処法がわかりません。 ページ更新などせずに、繰り返しアップロードしても、 うまく画像がリサイズする方法を是非教えてください。 【追記】 また、もしお分かりでしたら、 リサイズ方法やコード記述が正しいのかも教えて頂けると大変嬉しいです。 (若干綺麗にリサイズされな場合があるので) 以下コードになります。どうか宜しくお願いします。 <script type="text/javascript"><!-- function dispImage(sSrc) { document.p1.src = sSrc; document.p1.height; document.p1.width; if(document.p1.width > '150'){ document.p1.height = (document.p1.height / document.p1.width) * '150'; document.p1.width; } } // --></script> <INPUT type="file" onChange="dispImage(this.value);"><BR> <IMG name="p1">

  • javascript について追加の質問

    質問NO6591909=3/14 10:59の追加の質問です。 素晴らしい回答で非常に感謝いたしますが、追加でもう一つお願いします。あと一息といったところです。最後の部分なのですが、 function pd1() { if(flag) document.getElementById('ID1').style.visibility = "hidden"; else document.getElementById('ID1').style.visibility = "visible"; var img = document.getElementById('s1').getElementsByTagName("img"); img[0].src = "別の画像のURL" flag = !flag; } function fx(){ var num = location.search.substr(1,1); var the_id = "ID" + num.toString(); var the_id2 = "s" + num.toString(); document.getElementById(the_id).style.visibility = "visible"; var img = document.getElementById(the_id2).getElementsByTagName("img"); img[0].src = "別の画像のURL" } この3行上の"別の画像のURL"とありますが、上記ですと決まった一枚の画像しか表示できないということになりますよね? IDは9つありまして、9つ別々の画像をそれぞれ選択できるようにしたいのですが、その点を考慮するとどのような文になりますでしょうか?(function fx()を9つ別々に書くんでしょうか?・・・・・・)よろしくお願いいたします。 因みにここからhtml↓(さっきも書きましたが、また書いておきます。) <div id= "w1" onMouseover="document.s1img.src='img/s1rr.gif'" onMouseout="document.s1img.src='img/s1w.gif'"> <a href="javascript:pd1()">テキスト</a></div> <div id="ID1" style="visibility: hidden;" onMouseover="document.s1img.src='img/s1rr.gif'" onMouseout="document.s1img.src='img/s1w.gif'"> <p>テキスト<br /> </div> <div id="s1"><img src="img/s1w.gif" width="29" height="39" name="s1img"/></div>

  • jQueryリサイズ処理と記述でご指摘ください。

    jQueryプラグインで、「mLivre」というプラグインを使っております。 ※mLivre:[JS]雑誌をめくるようにぺらっと画像を表示するスクリプト http://coliss.com/articles/build-websites/operation/javascript/jquery-plugin-mlivre.html 「mLivre」は画像をめくるように表示してくれるプラグインです。 このプラグインをレスポンシブにしたいと思い、リサイズ命令でブラウザサイズに合わせて 大きさを変えていきたいと思っております。 現時点で画像の表示自体はリサイズ出来ておりますが、 ページをめくる動作でアニメーションの表示が上手くいきません。 一番初めの数値(ページを開いた時点での数値)を記憶しているのか、 一番初めに表示されていた場所から画像がめくられてしまいます。 (説明が下手で申し訳ございません) 素人で恐縮ですが、私の記述で間違っているところがあり 私自身、間違いに気付けない状態です。 下記にコードを記述いたしました。 ご指摘いただければと思います。 ---------「mLivre」呼び出し部---------- jQuery(function() { var imgWi; var imgHi; var winWi; var scaleWi; var setWi; var setHi; setSize(); jQuery('#slide').mLivre({ pageDefault:0, over:true, loader:true, eventLoad:null, eventOpen:null, width:setWi, height:setHi, dossier:'http://URL/images/slide/', //画像 }); function setSize() { //画像サイズ指定 imgWi = 500; imgHi = 375; winWi = jQuery( '#branding' ).width(); scaleWi = winWi / imgWi; setWi = winWi; setHi = imgHi * scaleWi; jQuery("#slide img").width(setWi); //画像の大きさ jQuery("#slide img").height(setHi); } }); ------「mLivre」コア部---------- //11行目はじまり (function(jQuery) { jQuery.fn.mLivre = function(options,num) { switch (options) { //switch部 略 // break; } //↓追加したリサイズ部 jQuery(window).resize(function(){ var imgWi; var imgHi; var winWi; var scaleWi; var setWi; var setHi; imgWi = 500; imgHi = 375; winWi = jQuery( '#branding' ).width(); scaleWi = winWi / imgWi; setWi = winWi; setHi = imgHi * scaleWi; jQuery("#slide img").width(setWi); //画像の大きさ jQuery("#slide img").height(setHi); var opts = jQuery.extend({}, jQuery.fn.mLivre.defaults, options); jQuery(this).each(function() { var $obj=jQuery(this); opts.width = setWi; opts.height = setHi; jQuery(".mLivre").width(setWi); //プラグインの大きさ jQuery(".mLivre").height(setHi); }); }); //↓元々の記述、変更していません var opts = jQuery.extend({}, jQuery.fn.mLivre.defaults, options); jQuery(this).each(function() { var $obj=jQuery(this); //省略 })(jQuery); var mLivre={ //ここからが処理部(アニメーション)だと思います。(変更していません) progress:false, //省略 }); } }

  • 【助けてください】POST受信の画像をリサイズ表示する方法

    お忙しい中お読み頂き、本当にありがとうございます。 プログラムに精通した方のお力が必要です。どうか一読ください。 現在PHP+Javascriptで、 (1)同ページで画像をリサイズして読み取る (2)確認画面でリサイズされた画像を表示する といったプログラムを作成しています。 先日この掲示板で大変親切なアドバイスを頂き、 (1)についてはできたのですが、 (2)の方法が分からない状態です。 【現在の問題点】 送信後のページで、画像は表示されるが、 画像サイズが大きいと、元の画像が一瞬表示されてしまう。 【希望する改善点】 リサイズされた状態の画像しか表示されないようにしたい。 ※どのようなコード記述でも構いません。 徹夜を繰り返して調べましたが、 私一人では解決できませんでした…。 下記作成中のスクリプトになります。 些細なアドバイスでも、大変嬉しいです。 どうかお力を貸してください。 □□□□ スクリプト □□□□ <?php extract($_POST);extract($_GET); ############### 送信【前】のページ ######################## if($mode == "first"){ echo<<<EOD <html> <head> <script type="text/javascript"><!-- var image; function init(){ image = new Image(); } function dispImage(sSrc) { var p = document.getElementById('p1'); var mx = 150; image.src = sSrc; if(image.width > mx){ p.height = (image.height / image.width) * mx; p.width = mx; p.src = sSrc; }else{ p.height = image.height; p.width = image.width; p.src = sSrc; } } // --></script> </head> <body onload="init();"> <form method="POST" action="$_SERVER[PHP_SELF]?mode=second"> <input type="file" onChange="dispImage(this.value);" name="gazou"><br /> <img id="p1"/><br /><br /> <input type="submit" value="確認画面へ" style="background:#ffcc99;color:black;"> </form> </body> </html> EOD; exit; } ############### 送信【後】のページ ######################## if($mode == "second"){ $gazou = $_POST[gazou]; echo<<<EOD <html> <head> <script type="text/javascript"><!-- function init(){ var p = document.getElementById('image1'); var mx = 150; if(p.width > mx){ p.height = (p.height / p.width) * mx; p.width = mx; }else{ p.height = p.height; p.width = p.width; } } // --></script> <body onload="init();"> <IMG src="$gazou" id="image1"> </body> </html> EOD; exit; } ?>

  • 画像の大きさ

    文字の横にちょっとした目印に1文字の大きさ程度の画像を表示させたいのですが、IEで文字のサイズを変更すると文字と画像がアンバランスになってしまいます。 文字の大きさを固定したくないと思っています。 単純に考えて、下のようなことができればと思っていますが、無理だと思っています。(???が埋まれば出来そうですが・・・) 参考になるサイトなどがありましたら教えてください。 <body> <img id="img" src="abc.gif" width="15" height="15" border="0" style="float:left;"><span>aaaaa</span> </body> <script> a = new Array("0.8","1.0","1.2"); if(??? == ???){i = 0;} else if(??? == ???){i = 1;} else if(??? == ???){i = 2;} document.getElementById("img").setAttribute('width',15*a[i]); document.getElementById("img").setAttribute('height',15*a[i]); </script>

  • jQueryの記述についてご指摘ください。

    jQuery初心者で大変恐縮ですが、質問させていただきました。 「mLivre」というプラグインを使用しております。(下記URLを参照ください) ※参考サイト 雑誌をめくるようにぺらっと画像を表示するスクリプト -mLivre http://coliss.com/articles/build-websites/operation/javascript/jque... このプラグインは本をめくるように画像を表示してくれるプラグインです。 レスポンシブでも動くようにしたいと思い、コードを記述してみました。 画像自体はレスポンシブになりましたが、プラグインの動作が少しおかしくなってしまいました。 リサイズすると、めくる様な動作をしてくれますが、画像が切り替わらなくなってしまいました。 原因は、リサイズ時に画像の枚数のカウントがおかしくなっているせいだと思いますが、 どう変えればいいのかわからずに困っております。 「mLivre.js」自体はいじっておりません。 スクリプト実行部分に記述を追記いたしました。 下記にコードを記述いたしましたので、もしよろしければご指摘いただければと 思います。 よろしくお願いいたします。 ------------コード--------------- jQuery(document).ready(function() { var imgW; var imgH; var winW; var scaleW; var setW; var setH; setSize(); //リサイズしたら実行 jQuery(window).resize(function(){ setSize(); }); function setSize() { //元の画像サイズ指定 imgW = 500; imgH = 375; //横幅に合わせて縦幅の調整 winW = jQuery( '#page' ).width(); scaleW = winW / imgW; setW = winW; setH = imgH * scaleW; //要素の画像サイズ jQuery("#slide img").width(setW); jQuery("#slide img").height(setH); //実行部分 jQuery('#slide').mLivre({ width:setW, height:setH, dossier:'http:/画像のURL/images... }); } });

  • JQUERY slideshowについて

    slide-show.jsについての質問です。 ホームページのトップイメージにスライドショーで3枚の写真を動かしています。 で、トップページの写真を9枚にして、左3枚・真ん中3枚・右3枚というふうに動かしたいです。 トップイメージの写真(幅900px)3枚を トップイメージの写真(幅300px)×3を3枚スライドにする (意味不明ですか・・・) 下の#slideshow01を#slideshow02、#slideshow03に増やして、設置したら動きませんでした。 出来れば、右→真ん中→左がちょっと時差をつけてスライドして欲しいです。 写真の切り替えは、CSSのZーindexを使っています。 現在のHTML <div id='slideshow01'> <!--スライドショーの3枚ここ!--> <img src="upimg/results/flash_1.jpg" alt="" width="300" height="400" /> <img src="upimg/results/flash_2.jpg" alt="" width="300" height="400" /> <img src="upimg/results/flash_3.jpg" alt="" width="300" height="400" /> <!--スライドショーの3枚終わり--> </div> 求めるHTML <div id='slideshow01'> <!--スライドショーの3枚ここ!--> <img src="upimg/results/flash_1.jpg" alt="" width="300" height="400" /> <img src="upimg/results/flash_2.jpg" alt="" width="300" height="400" /> <img src="upimg/results/flash_3.jpg" alt="" width="300" height="400" /> <!--スライドショーの3枚終わり--> </div> <div id='slideshow02'> <!--スライドショーの3枚ここ!--> <img src="upimg/results/flash_4.jpg" alt="" width="300" height="400" /> <img src="upimg/results/flash_5.jpg" alt="" width="300" height="400" /> <img src="upimg/results/flash_6.jpg" alt="" width="300" height="400" /> <!--スライドショーの3枚終わり--> </div> <div id='slideshow03'> <!--スライドショーの3枚ここ!--> <img src="upimg/results/flash_7.jpg" alt="" width="300" height="400" /> <img src="upimg/results/flash_8.jpg" alt="" width="300" height="400" /> <img src="upimg/results/flash_9.jpg" alt="" width="300" height="400" /> <!--スライドショーの3枚終わり--> </div> この js を使っています。 function slideSwitch() { var $active = $('#slideshow01 img.active'); if ( $active.length == 0 ) $active = $('#slideshow01 img:last'); var $next = $active.next().length ? $active.next() : $('#slideshow01 img:first'); $active.addClass('last-active'); $next.css({opacity: 0.0}) .addClass('active') .animate({opacity: 1.0}, 1000, function() { $active.removeClass('active last-active'); }); } $(function() { setInterval( "slideSwitch()", 4000 ); });

  • jQueryでappleっぽい画像ギャラリー設置したいです

    http://www.skuare.net/test/jAppleGal.htmlで紹介されていた画像ギャラリーを私のホームページにも組み込みたいと思っているのですが、CSS・JAVAを最近本を買ったりして勉強しはじめた初心者なだけに、紹介されている設置方法だけでは理解できなく質問させていただきました。 (1)とりあえずjQueryからjquery.jsをダウンロードはしましたが、こjquery.jsはどこにどうすればいいのでしょうか? (2) <div id="main"> <div id="gallery"> <div id="slides"> <div class="slide"><img src="画像パス1" width="920" height="400" /></div> <div class="slide"><img src="画像パス2" width="920" height="400" /></div> <div class="slide"><img src="画像パス3" width="920" height="400" /></div> <!-- 画像にはwidthとheightを指定します --> </div> <div id="menu"> <ul> <li class="fbar"> </li> //区切り線用 <li class="menuItem"><a href=""><img src="サムネイル画像パス1" /></a></li> <li class="menuItem"><a href=""><img src="サムネイル画像パス2" /></a></li> <li class="menuItem"><a href=""><img src="サムネイル画像パス3" /></a></li> </ul> </div> </div> </div> このコードはhtmlのheadに組み込むのでしょうか?それともbodyでしょうか? (3) 次にCSSを記述します。 特に難しい部分はないので、cssを見ていただくとして・・・ とありますが、リンク先のcssはいじらなくてもそのまま使用すればいいのでしょうか? 最後に、jQueryを記述すれば完成です。 $(document).ready(function(){ var totWidth=0; var positions = new Array(); $('#slides .slide').each(function(i){ positions[i]= totWidth; totWidth += $(this).width(); if(!$(this).width()) { alert("Please, fill in width & height for all your images!"); return false; } }); $('#slides').width(totWidth); $('#menu ul li a').click(function(e){ $('li.menuItem').removeClass('act').addClass('inact'); $(this).parent().addClass('act'); var pos = $(this).parent().prevAll('.menuItem').length; $('#slides').stop().animate({marginLeft:-positions[pos]+'px'},450); e.preventDefault(); }); $('#menu ul li.menuItem:first').addClass('act').siblings().addClass('inact'); }); とありますが、これはどこに組み込めばいいのでしょうか?また何も触らなくてもいいのでしょうか? 他にも分からないところだらけなので、立て続けに質問させていただくと思いますが、お手数おかけしますが力を貸してください。 よろしく御願いいたします。

  • 画像サイズの読み込み

    お世話になります。 javascriptで画像サイズを取得し、そのサイズに合わせてimgタグhtmlを吐き出すという処理を行っています。 ------------------ var i = new Image();  //**step1 i.src = strPath;  //**step2 hhh = i.height;  //**step3 document.getElementById('aaa').innerHTML ='<img src="" id="backImage" height="' + hhh + '"></img>'; ------------------ 上記において、**step2と**step3の間に、alert文を入れると、うまく画像サイズを取得できるのですが、alertがないと、hhh = 0 になってしまいます。 (うまくいくケースは以下↓) ------------------ var i = new Image();  //**step1 i.src = strPath;  //**step2 alert("sdf"); hhh = i.height;  //**step3 document.getElementById('aaa').innerHTML ='<img src="" id="backImage" height="' + hhh + '"></img>'; ------------------ なぜでしょうか・・・かれこれ数時間悩んでいろいろ試してみましたが、原因がサッパリわかりません。 ちなみに、hhh = 0 になるのは、最初の1回だけ、二度目にここを通ると、alertがなくてもhhhには正しく数値がセットされます。 どなたか、何かヒントになるようなことでもあれば、おしえてください。よろしくおねがいします。

  • DIVで同一ページ内にポップアップってできる??

    普通ポップアップをするときには別ウィンドウを立ち上げますが、DIVを使ってリンク元があるhtmlに別のhtmlを立ち上げることは可能でしょうか?? 画像のポップアップを同一ページに立ち上げるポップアップは既に手元にあります。 それを立ち上げるのを画像ではなくhtmlにしたいんです。 ----ソース---- 【HTML】 <div id="pWindow" style="position:absolute; visibility:hidden; width:100%; height:100%;"> <table style="width:100%; height:100%;" border="0" cellspacing="0" cellpadding="0"> <tr><td align="center" valign="middle"> <table style=" background-color:#FFF; border:1px solid #000;" border="0" cellspacing="15" cellpadding="0"> <tr><td align="center" valign="middle"> <img src="img/loading.gif" width="400" height="300" id="lPhoto"> </td></tr> <tr><td align="center" valign="middle"> <a href="javascript:cls()"><img src="img/close.gif" width="53" height="17" border="0"></a> </td></tr> </table> </td></tr> </table> </div> 【JavaScript】 //拡大画像を表示する function pwinOpen(imgSrc){ var lgPhoto=document.getElementById('lPhoto'); lgPhoto.src = imgSrc; var pWin=document.getElementById('pWindow'); pWin.style.visibility = 'visible'; } //拡大画像を閉じる function cls(){ var pWin=document.getElementById('pWindow'); pWin.style.visibility = 'hidden'; var lgPhoto=document.getElementById('lPhoto'); lgPhoto.src = "img/loading.gif"; } 分かる方、お忙しいところ申し訳ないんですがご教授ください!!

専門家に質問してみよう