2012-02-16 2 views
1

divの画像がいっぱい、右側に10スパンの段落の段落が含まれています。画像は絶対的なものなので、重なり合って重ねて表示され、最初は画像を隠すために負のマージンを持っています。対応する画像がスライドしているときにspanタグにCSSクラスを追加する

フェーズ1(ページが読み込まれ、ユーザーがある範囲を移動する前)では、画像が5秒間隔で設定され、無限に画像をループします。このフェーズとその間隔は、第2段階が発生したときにクリアされます。これは、対応するイメージが表示されるためにスライドするスパンタグにカーソルを合わせたときです。

フェーズ1とフェーズ2がコード化されていますが、私の質問は次のとおりです。フェーズ1では、デフォルトでイメージをアニメーション化するときに対応するスパンタグにCSSクラスあなたが上にカーソルを移動するときここでは、フェーズ2

でspanタグは、誰もがそれを周りいじるしたい場合のコードです:

<!--begin:content--> 
       <div id="content"> 

         <div id="pics"> 
          <img src="ADD ANY IMAGE" id="defaultImg" alt="" /> 
          <img src="ADD ANY IMAGE" id="hover_1_pic" alt="" /> 
          <img src="ADD ANY IMAGE" id="hover_2_pic" alt="" /> 
          <img src="ADD ANY IMAGE" id="hover_3_pic" alt="" /> 
          <img src="ADD ANY IMAGE" id="hover_4_pic" alt="" /> 
          <img src="ADD ANY IMAGE" id="hover_5_pic" alt="" /> 
          <img src="ADD ANY IMAGE" id="hover_6_pic" alt="" /> 
          <img src="ADD ANY IMAGE" id="hover_7_pic" alt="" /> 
          <img src="ADD ANY IMAGE" id="hover_8_pic" alt="" /> 
          <img src="ADD ANY IMAGE" id="hover_9_pic" alt="" /> 
          <img src="ADD ANY IMAGE" id="hover_10_pic" alt="" /> 
         </div> 

         <!--begin: homeText - block of span tags w/text referenced in jQuery --> 
         <div class="homeText">  
          <p> 
           <span id="hover_1" >evolve water.</span> 
           <span id="hover_2">stream the party.</span> 
           <br /> 
           <span id="hover_3">let moms play.</span> 
           <span id="hover_4">play on big screens.</span> 
           <br /> 
           <span id="hover_5">turn txt into sport.</span> 
           <span id="hover_6">have 18 wheels.</span> 
           <br /> 
           <span id="hover_7">have chapters.</span> 
           <span id="hover_8">personify an issue.</span> 
           <br /> 
           <span id="hover_9">transform neighborhoods.</span> 
           <br /> 
           <span id="hover_10">become keepsakes</span> 
          </p> 
         </div> 

      </div><!--end content--> 

CSS

#pics img { 
height: 131px; 
width: 334px; 
position: absolute; 
margin-left:-325px; 
} 

/* ADDED by ben sewards */ 
#pics { 
height:179px; 
width:335px; 
position: relative; 
overflow: hidden; 
margin:0px; 
padding-top:15px; 
margin-left:49px; 
float:left; 
} 

/* ADDED by ben sewards */ 
.homeText { 
width:600px; 
height:240px; 
padding-left:15px; 
padding-top: 10px; 
overflow: hidden; 
float:left; 
} 

.homeText p { 
line-height: 115%; 
font-family: @Adobe Fangsong Std R; 
font-size: 2.6em; 
font-weight:bolder; 
color: #c0c0c0; 
margin: 0px; 
} 

.homeText span:hover { 
background-color:Lime; 
color: White; 
cursor: pointer; 
} 

.span-background-change { 
background-color:Lime; 
color: White; 
} 

JSスクリプト

$('document').ready(function() { 
slideIn('defaultImg'); 
timer = setInterval('slideInNext()', 5000); 
functionHover(); 
}); 

var slideSpeed = 500; 

var slideIn = function (id) { 
$('#' + id).addClass('active').animate({ 'margin-left': '0px' }, { 'duration':    slideSpeed, 'easing': 'swing', 'queue': true }); 
} 
var slideOutCurrent = function() { 
$('#pics img.active').removeClass('active').animate({ 'margin-left': '325px' }, {  'duration': slideSpeed, 'easing': 'swing', 'queue': true, 'complete': function() {   $(this).css('margin-left', '-325px'); } }); 
} 

var slideInNext = function() { 
var curImage = $('#pics img.active'); 
var nextImage = curImage.next(); 
if (nextImage.length == 0) { 
    nextImage = $('#pics img:first'); 
} 
slideOutCurrent(); 
slideIn(nextImage.attr('id')); 
} 

var queueToSlideIn = []; 
var mouseOnTimer = null; 
var mouseOffTimer = null; 

var functionHover = function() { 
$('.homeText span').hover(
//binding 2 handlers to hover event 
function() { //when hovering over a span - mousenenter 
    clearTimeout(mouseOffTimer); 
    clearInterval(timer); 
    var thisId = $(this).attr('id'); 
    mouseOnTimer = setTimeout(function() { 
     if (!$('#' + thisId + '_pic').hasClass('active')) { 
      addToQueue(thisId + '_pic'); 
     } 
    }, 300); 
}, 
function() { //when off of span - mouseleave 
    clearTimeout(mouseOnTimer); 
    mouseOffTimer = setTimeout(function() { 
     if (!$('#defaultImg').hasClass('active')) { 
      addToQueue('defaultImg'); 
     } 
    }, 500); 
} 
); 
$('.homeText span').click(function() { 
    //set current span on click 
    $span = $(this).attr('id'); 
    //navigate to corresponding case study 
    var href = $('#' + $span + '_pic').attr('alt'); 
    window.location.href = href; 
}); 
} 

var addToQueue = function (id) { 
queueToSlideIn.push(id); 
$('#pics').queue(function() { animateNext(); $(this).dequeue(); }).delay(slideSpeed); 
} 

var animateNext = function() { 
if (queueToSlideIn.length > 0) { 
    var id = queueToSlideIn.shift(); 
    slideOutCurrent(); 
    slideIn(id); 
} 
}; 

インデントが乱雑な場合は申し訳ありません。

.homeText-hover { 
background-color:Lime; 
color: White; 
cursor: pointer; 
} 

は、その後、私はあなたのSlideInとslideOutCurrent関数に2行ずつ追加:

ベン

答えて

0

このsnippeが追加されました望ましい結果のための私のslideInNext機能へのコードのトン:

if (nextImage.attr('id') != "defaultImg") { 
    //add class to corresponding span tag of current image 
    var spanId = nextImage.attr('id'); 
    //corresponing span of next image 
    spanId = spanId.substring(0, spanId.length - 4); 
    $('#' + spanId).addClass('span-background-change'); 
} 

私はただの画像にid属性とスパンIDを表すためにローカル変数に配置引き離すためにJavaScriptでsubstringメソッドを使用していました。

1

は、私はあなたのホバークラスの複製であるクラス新たに追加

var slideIn = function (id) { 
var slId = id.split('_pic'); 
$('#' + slId[0]).addClass('homeText-hover'); 
$('#' + id).addClass('active').animate({ 'margin-left': '0px' }, { 'duration':    slideSpeed, 'easing': 'swing', 'queue': true }); 
} 
var slideOutCurrent = function() { 
var slId = $('#pics img.active').attr('id').split('_pic'); 
$('#' + slId[0]).removeClass('homeText-hover'); 
$('#pics img.active').removeClass('active').animate({ 'margin-left': '325px' }, {  'duration': slideSpeed, 'easing': 'swing', 'queue': true, 'complete': function() {   $(this).css('margin-left', '-325px'); } }); 
} 

あなたautoslideがFFでうまくいかない...

+0

私はあなたのアイデアが気に入っていますが、他のヘルパーメソッドではslideInが使用されているところが複雑になることがあります。私はそれを単純化し、適切なコードをslideInNext関数に追加しましたが、私のコードはあなたのものと似ています。再度、感謝します! –

+0

私は5時間で私の答えを掲示します。 –

+0

基本的には、オブジェクトを一貫してリンクする関係を見つける必要があります。 –

1

私はあなたのソリューションが好きです、ベン。識別属性を選択するのと同じ原則を使用する別のソリューションは、各img-spanペアに固有のクラスを各要素に追加し、それぞれが対応する要素と特定のクラスを共有することです。

以下

は、私はもともと以来閉鎖されているさまざまな問題を解決に投稿されたフラグなどのクラスの使用についての説明です:フラグ

として


クラス

要素にクラスを追加しても、必ずしも新しいCSSスタイルを与えるつもりはありません。 CSSは、特定の方法でスタイルを設定する要素を識別するために、クラスを使用する言語です。クラスはエレメントにCSSを適用する唯一の目的ではありません。これが当てはまらない場合、CSSは他のセレクタ(ID、親、子、子孫など)を使用するのではなく、クラスを使用して要素をスタイルするだけです。

開発者は、クラスを「フラグ」として使用することがよくあります。フラグは、その情報を変数に格納することなく、特定の要素に関する何かを通知する方法です。たとえば、要素のリストがあり、すべての要素がCSSクラスを使用して完全に同じスタイルになっているとします。開発者が要素のスタイルを変更することなく、後で使用するためにこのリストの他のすべての要素を特定の方法でマークしたい場合、要素に「代替」という第2のクラスを追加することができます。

要素に必要な数のクラスを追加できます。関連付けられたスタイルを持たない複数のクラスを追加するには、完全に受け入れ可能なコーディングスタイルです(他の用途に使用されている場合など) 。

関連する問題