jQueryで背景画像を変更する方法

このQ&Aのポイント
  • jQueryを使用して、ブロック要素の背景画像を別の画像に変更する方法について説明します。
  • 現行のPCサイトのHTMLをいじらずに、スマホ対応するために、動的に背景画像を変更したい場合には、jQueryを使うことができます。
  • 具体的な方法は、まずブロック要素の現在の背景画像を取得し、ファイル名を変更して新しい背景画像のURLを作成します。そして、jQueryの`css`メソッドを使って背景画像を変更します。
回答を見る
  • ベストアンサー

jQueryで背景画像を変更したい。

ブロック要素がありまして(下記<div id="box">boxの中身</div>) そのブロック要素の背景画像(背景は動的に生成)を 別の画像に変えたいと思っています。 ※現行のPCサイトのHTMLをいじらずに、スマホ対応しています 背景画像としては、 現在の背景画像⇒haikei.jpg 新しい背景画像⇒haikei_smp.jpg ↑こんな感じで ファイル名の「haikei」の部分は動的に生成しているため可変ですが、 もとの画像に「_smp」が付く画像ファイルを用意して、 対応したい考えています。 特にイベントはなく、loadしたら読み込む予定でいて 以下のように書いたのですが、 PC上のシミュレーターではうまくいくものの、 実際のスマートフォンで確認したら実行できませんでした。 PC上ではエラーもなかったのですが、 背景画像が変わらないといった不具合です。 HTML ---------------------- <div id="box">boxの中身</div> js ----------------------- $(function(){  //mainbgに現在の背景画像を格納  var mainbg = $("#box").css("background-image")    //mainbgを(".")で分割し、bgImgに格納  bgImg = mainbg.split(".");  var img01 = bgImg[0];  var img02 = bgImg[1];  //「_smp」を付与し、smp_mainbgに格納  var smp_mainbg = img01 + "_smp." + img02 ;  //jQueryでbackground-imageを変更操作  $("#box").css("background-image" , smp_mainbg); }); そもそも、この書き方がよいのか分かりませんが もっとスマートの書き方がありましたら 別の方法でも、どうかご教授ください。 どうぞ宜しくお願いいたします。

  • AJAX
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 >splitでは、途中に'.'が存在すると、うまくいかないこともあるんですね。 >そっか、indexOfを使えばいいんですね。 >勉強になります。 相対パスであれば画像の拡張子以外に'.'が入ることはほとんど無いと思いますが、URLの場合はドメインに必ず入ってきますのでその数が固定であればsplitかけて、後ろから見ていけばわかると思います。 単純に0と1要素で見ると、ドメインの.で区切られた文字になると思います。 今回は最後の'.'が画像の拡張子前ときめうちでの処理です。 *私のandroid端末では動作確認しています。

mc0816
質問者

お礼

LancerVIIさん 再解説ありがとうございます。 動作確認しました~ iosとandroid端末で期待通りできました。 毎度のことながら助かりました。 jQuery、知れば知るほど楽しいです。 今後も頑張ります。 また質問してしまう事が多々あるとは思いますが 今後もどうぞ宜しくお願いします。 本当に本当にありがとうございました。

その他の回答 (1)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 ==== 動作サンプル http://hppg.moe.hm/okwave/qa/q7372330/ 実際動かすと動かないのはおそらく var mainbg = $("#box").css("background-image") で取得したものが絶対パスになっているからだと思います。 取得したmainbgを見てみるとurl('http://xxx.xxx/xxx.png')とかになっていると思います。 (途中に'.'が存在するとファイル名以外のところでもsplitされるため) なので以下のようにしてみました。 $().ready ( function() { var mainbg = $('#box').css ( 'background-image' ); // 最後の.より前をv1へ var v1 = mainbg.substring(0,mainbg.lastIndexOf('.') ); // 最後の.より後ろをv2へ var v2 = mainbg.substring(mainbg.lastIndexOf('.') ); // 間に_smpを挿入したものをファイルパスとして与える $('#box').css ( 'background-image' , v1 + '_smp' + v2 ); });

mc0816
質問者

お礼

LancerVIIさん 今回もお世話になりました! 相変わらずの親切な解説とサンプル&素早い回答を ありがとうございます。 splitでは、途中に'.'が存在すると、うまくいかないこともあるんですね。 そっか、indexOfを使えばいいんですね。 勉強になります。 それで、実装してみて、 PC上のスマホシミュレーターでは期待通りにできました。 ですが、スマホの実機でまだ確認できていないのです。 まずは、取り急ぎ御礼したいと思いペンをとりました。 本当に本当にありがとうございました。

関連するQ&A

  • jQuery 背景のURLを取得しimgで表示

    スマホサイトの作成をしています。 やりたい事は、タイトル通りで jQueryを使って、 あるブロック要素の背景画像のURLを取得し、 そのデータをimgのsrc属性に入れて imgとして表示したいと考えております。 補足としいて ・imgは、同じブロック要素内に表示します。 ・取得するbackground-imageは絶対パスで書かれているものです。 スクリプトは以下のように書きました。 ---------------------------------------- var bgImg = $("#box").css("background-image"); var bgImgFile = bgImg.substring(5, bgImg.length - 2); $("#box").prepend("<img src='" + bgImgFile + "'>"); //最終的に#boxの背景画像をなくす処理 $("#box").css("background-image","none"); ---------------------------------------- ですが、bgImgの値がブラウザによって違うのです。 alert(bgImg)で確認してみると、下記のようにalert表示されました。 ●Firefoxでは   url("http://****.jpg") ●ios(iphone)では  url(http://***.jpg)  ← " "が付いていない これにより、結果、bgImgFileの値が変わってしまい、 ios(iphone)では背景画像を表示できません。 もし可能であれば、これの原因や、 他にもし方法があれば教えて下さると助かります。 詳しい方、どうぞ宜しくお願いいたします。

    • ベストアンサー
    • AJAX
  • 【jquery】スクロールで背景画像もついてくる

    よろしくお願いいたします。 jqueryを使って背景画像をスクロールと一緒についてくるようにしたいのですが、 思い通りにいかず、質問させていただきたいと思います。 やりたいと思っていることは、 まず背景画像1(1.jpg)をbodyにbackgroundに設定して、 その上に<div></div>タグで背景画像2(2.png:透過画像)をbackgroundに設定し、 背景画像2だけスクロールと一緒についてくるようにしたいと思っています。 現状のソースは以下になっています。 【html head内】 <script src="jquery.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { $(window).scroll(function(){ var y = $(this).scrollTop(); $('#haikei').css('background-position', '50%'+ parseInt( y / 3 ) + 'px'); }); }); </script> 【html body内】 <div id="haikei"> <div id="wrapper"> <div id="header">  ~略~ </div> <div id="contents">  ~略~ </div> </div> </div> 【CSS内】 #bg01 { background: url(2.png) top center repeat-y; } 今の状態だと、動き自体は思い通りに動いてくれるのですが、 背景画像を表示させたい位置がありまして、 <div id="header"></div>内には2.pngを表示させず、 <div id="contents"></div>の部分から2.pngを表示させて スクロールについてくるようにしたいと思っています。 下記のように、 <div id="wrapper"> <div id="header">  ~略~ </div> <div id="haikei"> <div id="contents">  ~略~ </div> </div> </div> と、<div id="haikei"></div>の位置を変えてみましたが、 これだとスクロールしたときに、<div id="header"></div>の下から 画像が途中からはみ出てくる?ような感じで、きれいにスクロールされません。 さらにCSSのrepeat-yをno-repeatに変えて試してみましたが、 その場合画像がページの一番下まで動いてくれません。 (途中までしか画像がついてきてくれない感じです) 方法としては、2.pngの表示開始位置を<div id="header"></div>より下に位置指定すれば うまくいくのかなと思ったのですが、書き方がわからず。。。 なにかうまくいく書き方はないでしょうか・・? もしくは上記の方法以外でも、実現できそうなやり方や、 参考になりそうなサイトがあればお教えいただきたいと思っています。 ちなみに、私が参考にさせていただいたサイト様はこちらです。 http://www.webopixel.net/javascript/350.html わかりにくい点がありましたら、補足いたします。 どうぞよろしくお願いいたします。

  • jQueryでCSSの背景画像を切り替えたい

    見出しをクリック後にCSSで指定している背景画像を変えるため、jQueryでCSSを変更させてみたところ上手くいきません。 jQueryで指定する変更後の背景画像を絶対パスに換えたら上手くいったので、 パスの指定方法が悪いところまでは分かったのですが、相対パスでの指定方法がわからなくなりました。 WordPress環境で下記のコードを使用しています。 ご教授の程、よろしくお願い致します。 【 jQuery】 ○ディレクトリ : テーマフォルダ/js/change.js jQuery(function() { jQuery("h3 div.class").hide(); jQuery("h3").click(function() { jQuery(this).next().slideToggle("fast"); jQuery(this).css("background-image" , "url('img/pic2.jpg')"); }); }); 【CSS】 ○ディレクトリ : テーマフォルダ/style.css h3 { background: #7c8187; background-image: url(img/pic.jpg); cursor: pointer; } 【画像】 ○ディレクトリ : テーマフォルダ/img/pic.jpg テーマフォルダ/img/pic2.jpg

    • ベストアンサー
    • CSS
  • CSSで背景画像の幅を指定したい

    お世話になります。 現在CSSを猛勉強中なのですが、検索してもひっかからず、悩んでいるので質問させてください。 cssでは   #maincontents{ width:760px;}   #background-image: url(../img/haikei.jpg); HTMLでは   <div id="maincontents">   </div> としているのですが、反映されず、背景はウィンドウを横に伸ばせばのばしただけ広がってしまいます。 Yahooなどのように縦長のHPを作りたいのですが困っています。 お分かりになるかたがいましたらお答えいただけたら幸いです。

  • jQueryで背景画像と複数画像を変更

    jqueryで、divのボックス全体をリンクにし、マウスオーバーでdiv内の画像2点とdivの背景画像を変更したいと考えております。 <div class="linkbox">  <img src="image01.gif">  <img src="image02.gif"> </div> マウスオン用の画像は image01_on.gif image02_on.gif bg01_on.gif と、統一して「_on」をつけております。 マウスオーバーで背景を変更する方法とマウスオーバーで画像を変更する方法とボックス全体をリンクにする方法はそれぞれ見つけたのですが、うまく組み合わせることができません… 何か解決策がございましたら教えてください。 よろしくお願いいたします。

  • jQueryにて背景のURLを取得

    jQueryにて背景のURLを取得しimgを表示する場合で背景を縦横の倍率を50%に縮小するにはjavascriptをどうすればいいのでしょうか? 【javascript】 jQuery(function($){ var ori_img = $("#crop_img"); crop_window.css({'background-image': 'url('+ori_img.attr('src')+')'}); }); 【HTML部分】 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <div id="crop"> <img src="./test.jpg" id="crop_img" alt="" > <div id="crop_window"></div> </div>

    • ベストアンサー
    • AJAX
  • cssで、imgタグに、背景画像を敷きたい

    cssで、imgタグに、背景画像(影)を敷く方法を教えてください。 ※divタグに敷く方法は分かるのですが、imgタグに敷く方法が分かりません。 ■現状 <HTML> <div id="hoge"> <img src~ <CSS> #hoge img { background-image:url(/images/background_shodow.jpg); background-repeat: none; background:position: ? width:? height:? margin:? padding:?; <影の大きさ> ・width400px ・height200px <写真のサイズ指定> ・width390px ・height190px ※これまでは、 写真のサイズが違うので、 css部分の#hoge img で、 画像の大きさを強制指定してました。 出来れば、 画像の大きさは、html側で指定せずに、 css側で調整したいです。 ムリなら、html側で大きさ指定します。 div枠にcss設定できれば早いかと思いますが、 それが出来ないため(img タグにしかcss指定不可)の相談です。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • background-imageが効かない

    HTML5で組んだページでCSSを使っています。 bodyタグに設定したbackground-imageは背景に画像が表示されるのですが、body内に置いたid名をつけたdivタグに設定したbackground-imageが効きません。どのようにすれば効くのでしょうか。 【効く】 body { background-image: url("./images/haikei.jpg"); } 【効かない】 #contents { background-image: url("./images/haikei.jpg"); } そもそも、HTML5でdivタグを使うこと自体が誤りなのでしょうか。

    • 締切済み
    • CSS
  • 背景画像だけをはみ出して表示させたい。

    CSSについて質問です。 よろしくお願いします。 CSSで背景画像だけをはみ出して表示させたいのですが、 やり方がわかりません。 例えば、exampleというIDをつけている要素があって、 中のテキストははみ出さずに背景画像だけをはみ出して表示させたいです。 ===CSS=== #example{ background-image:url(images/backimage.gif); background-repeat:no-repeat; } ===HTML=== <div id="example">背景だけはみ出したい!!</div> overflowを使うと中のテキストがはみ出してしまいますが、 何かいい方法はありませんでしょうか。 具体的には横幅180pxのサイドバーに182pxの背景画像を付けて 枠を作ろうとしています。 ご教示の程よろしくお願い申し上げます。

    • ベストアンサー
    • HTML
  • 画像 重ねる

    htmlソース <div id="title"> <a href="index.html"><img src="img/logo.png"></a> </div> cssソース #title{ background-image: url(img.jpg); } cssソースに記述してある画像が、htmlソースのリンク付き画像の背景に表示されません。 対処方法をご教示いただけないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • CSS

専門家に質問してみよう