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

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

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

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

解決済

2回答

2636閲覧

フェードイン・アウトで画像を切り替えるとき画像サイズがかわってしまいます

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

0クリップ

投稿2017/01/27 05:24

###前提・実現したいこと
カーソルを合わせるとフェードイン・アウトで画像を切り替えるようにしたいのですが,
bootstrapを使用しているためか、2つ全く同サイズの画像を用いているのに
フェードインさせる画像だけ大きく表示されてしまいます。
どうしたらサイズを変えずに表示できるでしょうか。

###該当のソースコード

HTML

1 <div class="row"> 2 <div class="col-xs-6 col-sm-4"> 3 <a> 4 <img src="images/picture_off.jpg" alt="" class="img-responsive" /> 5 </a> 6 </div> 7</div>

javascript

1function smartRollover() { 2 if(document.getElementsByTagName) { 3 var images = document.getElementsByTagName("img"); 4 5 for(var i=0; i < images.length; i++) { 6 if(images[i].getAttribute("src").match("_off.")) 7 { 8 images[i].onmouseover = function() { 9 this.setAttribute("src", this.getAttribute("src").replace("_off.", "_on.")); 10 } 11 images[i].onmouseout = function() { 12 this.setAttribute("src", this.getAttribute("src").replace("_on.", "_off.")); 13 } 14 } 15 } 16 } 17} 18 19if(window.addEventListener) { 20 window.addEventListener("load", smartRollover, false); 21} 22else if(window.attachEvent) { 23 window.attachEvent("onload", smartRollover); 24} 25 26 27// cross fade 28 29new function(){ 30 function setRollOver2(){ 31 if(!document.images){return;} 32 var imgs = document.images; 33 var insert = []; 34 for(var i=0;i<imgs.length;i++){ 35 var splitname = imgs[i].src.split('_off.'); 36 if((splitname[1])&&(imgs[i].parentNode.tagName=='A')){ 37 var rolloverImg = document.createElement('img'); 38 rolloverImg.src = splitname[0]+'_on.'+splitname[1]; 39 var alpha = 0; 40 rolloverImg.currentAlpha = alpha; 41 rolloverImg.style.opacity = alpha/100; 42 rolloverImg.style.filter = 'alpha(opacity='+alpha+')'; 43 rolloverImg.style.position = 'absolute'; 44 45 46 addEvent(rolloverImg,'mouseover',function(){setFader(this,100);}); 47 addEvent(rolloverImg,'mouseout',function(){setFader(this,0);}); 48 49 insert[insert.length] = {position:imgs[i],element:rolloverImg}; 50 } 51 } 52 for(var i=0;i<insert.length;i++){ 53 var parent = insert[i].position.parentNode; 54 parent.insertBefore(insert[i].element,insert[i].position); 55 } 56 } 57 58 59 function setFader(targetObj,targetAlpha){ 60 targetObj.targetAlpha = targetAlpha; 61 if(targetObj.currentAlpha==undefined){ 62 targetObj.currentAlpha = 100; 63 } 64 if(targetObj.currentAlpha==targetObj.targetAlpha){ 65 return; 66 } 67 if(!targetObj.fading){ 68 if(!targetObj.fader){ 69 targetObj.fader = fader; 70 } 71 targetObj.fading = true; 72 targetObj.fader(); 73 } 74 } 75 76 function fader(){ 77 this.currentAlpha += (this.targetAlpha - this.currentAlpha)*0.2; 78 if(Math.abs(this.currentAlpha-this.targetAlpha)<1){ 79 this.currentAlpha = this.targetAlpha; 80 this.fading = false; 81 } 82 var alpha = parseInt(this.currentAlpha); 83 this.style.opacity = alpha/100; 84 this.style.filter = 'alpha(opacity='+alpha+')'; 85 if(this.fading){ 86 var scope = this; 87 setTimeout(function(){fader.apply(scope)},30); 88 } 89 } 90 91 function addEvent(eventTarget, eventName, func){ 92 if(eventTarget.addEventListener){ 93 eventTarget.addEventListener(eventName, func, false); 94 }else if(window.attachEvent){ 95 // IE 96 eventTarget.attachEvent('on'+eventName, function(){func.apply(eventTarget);}); 97 } 98 } 99 100 addEvent(window,'load',setRollOver2); 101 102} 103 104

###補足情報(言語/FW/ツール等のバージョンなど)
Bootstrap 3.3.7使用
JQuery 1.11.3使用

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

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

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

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

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

naomi3

2017/01/28 04:56

bootstrapを使用していませんが、バグが再現できません。
退会済みユーザー

退会済みユーザー

2017/02/07 00:02

Watanababe様より頂いた回答にあります通りimgタグのクラスが統一されていないのが問題であったようです。
退会済みユーザー

退会済みユーザー

2017/02/07 00:03

検討頂きありがとうございます!
guest

回答2

0

この次の記事の別の方法で実現できているようですね。
こちらはご参考までにお願いします^^

投稿2017/02/01 17:26

_yu_

総合スコア91

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

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

0

ベストアンサー

初投稿です(^_^)

修正方法ですが、下記のいずれかで直りませんでしょうか。

◆1.class 名「.img-responsive」の CSS に「max-width: initial;」などを追加する。

/* 大雑把な例 */ .img-responsive { max-width: initial !important; }

◆2.後からjsで追加する<img>タグ(images/picture_on.jpg)の class に「img-responsive」を追加する。

// js内 ... rolloverImg.style.filter = 'alpha(opacity='+alpha+')'; rolloverImg.style.position = 'absolute'; rolloverImg.className = "img-responsive"; // ここを追加

ご記載いただいているソースをローカル上で試したところ、
最初に入っている<img>画像(images/picture_off.jpg)の大きさが、
元の画像サイズより小さくなっていました。

Chrome のデベロッパーツールで確認したところ、
bootstrap.css の class 名「.img-responsive」の「max-width: 100%;」が影響していました。

/* bootstrap.css */ .img-responsive, .thumbnail > img, .thumbnail a > img, .carousel-inner > .item > img, .carousel-inner > .item > a > img { display: block; max-width: 100%; /* ★ここです。 */ height: auto; }

class 名「.img-responsive」が付いている<img>タグと
付いていない<img>タグで画像サイズが異なっていました。

ですので、上記の1か2の方法で解決できるのではないでしょうか。

投稿2017/02/01 16:55

編集2017/02/01 17:18
_yu_

総合スコア91

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

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

退会済みユーザー

退会済みユーザー

2017/02/07 00:00

ご回答ありがとうございます! 回答に気付かずご連絡が遅くなって申し訳ありません。 ご丁寧な回答の御蔭で無事解消することができました。 他方法でも試行錯誤して解決できましたが 現在自力でなんとか勉強しているところなので このようなアドバイス本当に勉強になります! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問