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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

スライダー

GUIのグラフィカルウィジェットのひとつです。インジケーターを動かすことで値を調節可能とします。

jQuery

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

Q&A

1回答

2598閲覧

スライダーの時に画像の表示位置を常に真ん中にしたい

chanmayu10

総合スコア6

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

スライダー

GUIのグラフィカルウィジェットのひとつです。インジケーターを動かすことで値を調節可能とします。

jQuery

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

0グッド

0クリップ

投稿2017/10/11 14:57

編集2017/10/11 14:58

###前提・実現したいこと
JQueryでプラグインを使わずに自作でスライダーを作っています。ウィンドウ幅を縮めても画像の表示位置を常に真ん中にする方法をご教授ください。

###発生している問題・エラーメッセージ
widthが1980pxの画像を3枚スライドさせているのですが、ウィンドウ幅が1980px以下になると画像の左が固定されてしまいます。
結果、画像の左端〜ウィンドウ幅までしか画面が見えず、右側がバランス悪く見切れてしまうのです。

###該当のソースコード
<div id="sliderContainer">
<div id="bannerBox">
<ul class="clearfix">
<li><img src="img/slider_01.jpg"></li>
<li><img src="img/slider_02.jpg"></li>
<li><img src="img/slider_03.jpg"></li>
</ul>
</div>
<div id="btnPagination">
<ul>
<!-- <li>は自動追加 -->
</ul>
</div>
<p id="btnPrev"><a href="#"><img src="slider/btn_prev.png"></a></p>
<p id="btnNext"><a href="#"><img src="slider/btn_next.png"></a></p>

</div> <style> #sliderContainer { margin: 0; padding: 0; border: 0 none; } #sliderContainer ul, #sliderContainer li { list-style-type: none; } /* sliderContainer */ #sliderContainer { margin-left: 1px; width: 1980px; height: 730px; } /* bannerBox */ #sliderContainer #bannerBox ul { margin-left: 0; width:1980px; height:730px; overflow: hidden; position: relative; } #sliderContainer #bannerBox ul li { float: left; width: 1980px; position: absolute; visibility:hidden; max-height:730px; } /* btnPrev & btnNext */ #sliderContainer #btnPrev, #sliderContainer #btnNext { border: 0 none; width: 38px; height: 730px; position: relative; } /* btnPrev */ #sliderContainer #btnPrev { top: -745px; left: 13px; } /* btnNext */ #sliderContainer #btnNext { top: -745px; right: 1px; } /* btnPagination */ #sliderContainer #btnPagination { position: relative; overflow: hidden; top: -22px; } #sliderContainer #btnPagination ul { float: left; position: relative; left: 11px; } #sliderContainer #btnPagination ul li { float: left; position: relative; margin: 0 9px; } #sliderContainer #btnPagination ul li a { display: block; width: 13px; height: 13px; background-color:red; background-position: 0 0; overflow: hidden; } #sliderContainer #btnPagination ul li a img { visibility: hidden; display: none; } </style>

//ページを読み込んでから処理開始
$(window).load(function(){
//一瞬次の画像が表示されるのを対策
$("#sliderContainer #bannerBox ul li").css({
"visibility" : "visible"
});
var _imgNum = 0; //画像の枚数。カウント用。スクリプトで取得
var _imgWidth = 0; //画像のwidth。スクリプトで取得
var _current = 0; //現在の画像の位置。スクリプトで取得
var _timerSpeed = 5000; //タイマー時間。1000=1秒
var _fadeSpeed = 200; //左右ボタンのフェード時間

//bannerBoxとbtnPaginationのulの指定
var _bannerUL = "#bannerBox ul";
var _paginationUL = "#btnPagination ul";

//画像の横幅取得
_imgWidth = $(_bannerUL).children("li").width();

//画像の枚数分だけ繰り返す処理
$(_bannerUL).children("li").each(function(){

//画像を外に配置 $(this).css("margin-left", -_imgWidth); //最初の画像の時 if(_imgNum == _current){ $(this).css("margin-left", "0"); }else{ } //ループの数をカウントし、変数_imgNumに格納 _imgNum++;

});//$(_bannerUL).children("li").each(function() END

//一定時間ごとに画像を切り替える関数(slideImg)を実行
var loopSwitch = setInterval(loop, _timerSpeed);
function loop(){
slideImg(_current + 1);
}

//次へ進むボタンをクリック
$("#btnNext").click(function(e){
e.preventDefault();
slideImg(_current + 1);
});

//前へ戻るボタンをクリック
$("#btnPrev").click(function(e){
e.preventDefault();
slideImg(_current - 1);
});

//画像を切り替える関数
function slideImg(next){
////ループ時間をリセット
clearInterval(loopSwitch);
loopSwitch = setInterval(loop, _timerSpeed);

//次の画像番号が大きければ、変数posに画像の横幅を代入 //次の画像番号が小さければ、変数posに画像の横幅(マイナス)を代入 var pos; if(_current < next){ pos = _imgWidth; }else{ pos = -_imgWidth; } //現在の画像が最後なら、次は1枚目を表示 //現在の画像が最初なら、次は最後を表示 if(next == _imgNum){ next = 0; }else if(next == -1){ next = (_imgNum - 1); } //次の画像を表示 $(_bannerUL).children("li").eq(next).css("margin-left", pos).animate({ marginLeft: "0" }, { duration: 'slow', easing: 'swing', } ); //現在の画像を外へ配置 $(_bannerUL).children("li").eq(_current).animate({ marginLeft: -pos }, { duration: 'slow', easing: 'swing', } ); //画像の位置を次の番号に _current = next;

}//function slideImg(next) END

$("#bannerBox").hover(function(){

});
});
###試したこと
#sliderContainer #bannerBox ul li ing{
position:absolute;
margin-left:-990px;
left:50%;
}
↑これはやりましたが、margin-leftの値を変えることでスライドさせているので今度はうまくスライドしなかった上に画像の表示されかたも変わりませんでした…

###補足情報
まだ勉強し始めて1週間程度ですので、お手柔らかにご指導願います。

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

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

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

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

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

kei344

2017/10/12 00:18

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答1

0

#sliderContainer以下のwidthを全部100%にして、画像をliの背景にしてセンター配置するのはいかがでしょう?
あと、ulのデフォルトスタイルのpaddingが残っているようなので消しておいたほうがよさそうです。

投稿2017/10/14 03:33

Lhankor_Mhy

総合スコア36104

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問