• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jQueryでタブ、スライダーを使う際の質問です)

jQueryでタブ、スライダーを使う際の質問です

このQ&Aのポイント
  • jQueryを使って、タブの中に写真を動かすスライダーを作ったが、2つめのタブのスライダーが終わっても空白のページに進んでしまう
  • ページネーションの数も写真の数以上に表示され、色が変わらない
  • 初心者なので難しい作りにしてしまったが、この作りは不可能なのか似た質問を見てもできない

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

  • ベストアンサー
回答No.1

初心者の方には、ちょっと難しいカスタマイズですね・・・。 このカルーセルのJSは、1つのカルーセルしか動きません。 中身をかなり書き換えないと対応することは難しいです。 というわけで書き換えました。 JSとCSSを書き換えたので、アップします。 とりあえずJSの方を <script type="text/javascript"> $(function(){ $('.carousel').each(function(){ var carouselWidth = $(this).width(); var carouselHeight = $(this).height(); var target = $(this); var targetBase = target.find('ul.carousel_base'); target.append('<div class="carousel_prev"></div><div class="carousel_next"></div>'); targetBase.wrapAll('<div class="carousel_wrap"></div>'); targetBase.children('li').addClass('base_list'); var prev = target.find('.carousel_prev'); var next = target.find('.carousel_next'); var carWrap = target.find('.carousel_wrap'); var prevSize = prev.width(); var nextSize = next.width(); carWrap.css({ width: (carouselWidth), height: (carouselHeight), position: 'relative', overflow: 'hidden' }); var listWidth = targetBase.children('li').width(); var listCount = targetBase.children('li').length; targetBase.css({ top: '0', left: '0', width: (listWidth)*(listCount), position: 'absolute' }); carouselPosition(); prev.click(function(){ caroselPagination.find('a').stop().animate({opacity:'0.5'},300); carWrap.find('ul.carousel_base:not(:animated)').animate({left: '+=' + (listWidth)},1000,function(){ caroselPagination.find("a.active").prev('a').addClass('active').siblings().removeClass('active'); controlOpacity(); carouselPosition(); }); }); next.click(function(){ caroselPagination.find('a').stop().animate({opacity:'0.5'},300); carWrap.find('ul.carousel_base:not(:animated)').animate({left: '-=' + (listWidth)},1000,function(){ caroselPagination.find("a.active").next('a').addClass('active').siblings().removeClass('active'); controlOpacity(); carouselPosition(); }); }); function carouselPosition(){ var ulLeft = targetBase.css('left'); var maskWidth = (carouselWidth) - ((listWidth)*(listCount)); if(carouselWidth >= ((listWidth)*(listCount))) { prev.css({display:'none'}); next.css({display:'none'}); } else if(ulLeft == 0+'px') { prev.css({display:'none'}); next.css({display:'block'}); } else if(ulLeft == (maskWidth)+'px') { prev.css({display:'block'}); next.css({display:'none'}); } else { prev.css({display:'block'}); next.css({display:'block'}); }; }; var caroselPagination = $('<div class="carousel_pagination"></div>'); target.append(caroselPagination); caroselPagination = target.find('.carousel_pagination'); targetBase.find('li.base_list').each(function(){ caroselPagination.append('<a href="javascript:void(0);"></a>'); }); caroselPagination.find('a').each(function(i){ $(this).attr('class','control_btn' + (i+1)).css({opacity:'0.5'}); }); caroselPagination.find('a:first').each(function(i){ $(this).addClass('active').stop().animate({opacity:'1'},300); }); var controlCount = caroselPagination.children('a').length; caroselPagination.find('a').click(function(){ var connectCont = caroselPagination.find('a').index(this);// 0 START caroselPagination.find('a').removeClass('active').css({opacity:'0.5'}); $(this).addClass('active').css({opacity:'1'});; targetBase.animate({left: '-' + ((listWidth)*(connectCont))},1000,function(){ carouselPosition(); }); }); caroselPagination.find('a:not(.active)').hover(function(){ $(this).not('.active').stop().animate({opacity:'1'},300); }, function(){ $(this).not('.active').stop().animate({opacity:'0.5'},300); }); function controlOpacity(){ caroselPagination.find('a').each(function(){ if ($(this).hasClass('active')) { $(this).stop().animate({opacity:'1'},300); } else { $(this).stop().animate({opacity:'0.5'},300); }; }); }; }); }); </script>

bhm1027
質問者

お礼

できました!!! お返事が遅くなり大変申し訳ありませんでした。 回答が来た時は感激で涙が出そうなくらい嬉しかったです。 外出中ですぐに確認できずにうずうずしていましたが、今書き換えて頂いたものを使ったら ちゃんと動きました。 本当に本当にありがとうございます!! すごい。。。 初心者ならいきなり難しい事をしないで、もっと基本から勉強して1つ1つ確実に理解しながら 作っていかなくてはと反省致しました。 いつかは、kamepanmanさんのように質問に答えられる人になれるように一生懸命勉強します。 とか言いつつまた質問しちゃうかもしれませんが....(^.^;) わざわざ本当にありがとうございました。感謝致します!!

その他の回答 (2)

回答No.3

<div class="carousel"> <ul class="carousel_base"> の箇所全てに適用するように書き換えました。 またイベント関係が、一括で設定されていたので、カルーセル単位で発生するように書き換えています。 あと補足ですが、タブを使用されているとのことですので、 タブが非表示の場合に、カルーセルのエレメントの幅などが取得できないために、うまく表示しないことも可能性として考えられます。 その場合は、 タブの切り替え発生時にカルーセルの生成(または更新)するように書き換える必要があります。

回答No.2

次にcommon.cssの方を @charset "utf-8"; /* ======================================= CommonElements ======================================= */ body { font-size: 100%; line-height: 140%; font-family: Arial,Helvetica,sans-serif; color: #000; text-align: center; background: #fff; } a:link { text-decoration:none; color: #000;} a:visited { text-decoration:none; color: #000;} a:active { text-decoration:none; color: #000;} a:hover { text-decoration:none; color: #000;} h1 { margin-bottom: 20px; padding: 10px 0; background: #000; color: #fff; font-size: 12px; font-weight: bold; text-align: center; } h2 { padding: 50px 0; width: 100%; font-size: 12px; } #container { width: 100%; text-align: center; } .carousel { margin: 0 auto; width: 500px; height: 100px; text-align: left; position: relative; } .carousel_prev, .carousel_next { top: 0; width: 20px; height: 100px; background: #000; cursor: pointer; position: absolute; } .carousel_prev { left: -20px; background:transparent url(../img/prev.jpg) no-repeat top left; } .carousel_next { right: -20px; background:transparent url(../img/next.jpg) no-repeat top left; } .carousel ul.carousel_base { height: 100px; overflow: hidden; } .carousel ul.carousel_base li { width: 500px; float: left; display: inline; } .carousel ul.carousel_base li ul { width: 500px; } .carousel ul.carousel_base li ul li { width: 100px; float: left; display: inline; } .carousel .carousel_pagination { padding: 10px 0; width: 100%; text-align: center; } .carousel .carousel_pagination a { margin: 0 5px; width: 15px; height: 15px; display: inline-block; overflow: hidden; background:transparent url(../img/pagination_icon.jpg) no-repeat top left; } /* ======================================= ClearFixElements ======================================= */ .carousel ul:after { content: "."; height: 0; clear: both; display: block; visibility: hidden; } .carousel ul { display: inline-block; overflow: hidden; }

関連するQ&A