2013-01-10 73 views
3

內我有一個的jsfiddle這裏有一個不錯的懸停效果我的工作,但我想知道是否有可能有包含在父哈弗動畫包含父

http://jsfiddle.net/cyXKx/

內懸停效果一切都運作良好,除了最右邊的列表項目和最後一排懸停在網格之外。理想情況下,我希望它們從右側的右上角和底部的左下角逐漸增長。

我希望這是有道理的,我只想知道它是否可能?

下面是HTML

<ul class="tearsheets"> 
    <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
    <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
     <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
     <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
      <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
      <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
       <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
       <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
        <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
        <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
         <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 
         <li><a href="#"><span><img class="galleryImg" src="http://lorempixum.com/200/200/transport"></span></a></li> 

    </ul> 

和CSS

ul.tearsheets{ 
     overflow:hidden; 
     clear:both; 
     max-width:100%; 
     position:relative; 
    } 
    .tearsheets li span { 
     display:inline-block; 
     vertical-align:middle; 
     height:110px; 

    } 
    .tearsheets{ 
     padding:18px 18px 108px 18px; 
    } 
    .tearsheets li{ 
     float:left; 
     line-height:110px; 
     width:160px; 
     list-style:none; 
     height:110px; 
     background-color:#9C9B9B; 
     text-align:center; 
     position:relative; 
     margin:0 1px 1px 0; 
     -moz-transition: all 0.25s ease; 
     -webkit-transition: all 0.25s ease; 
    } 
    .tearsheets li a{ 
     display:block; 

    } 
    .tearsheets li span img{ 
     padding-top:10px; 
     z-index: 0; 
     max-height:90px; 
     -moz-transition: all 0.25s ease; 
     -webkit-transition: all 0.25s ease; 
    } 
    .tearsheets li a:hover{ 
     height:221px; 
     background-color:#9C9B9B; 
     width:321px; 
     position:absolute; 
     z-index:1000000; 
    } 
    .tearsheets li a:hover span{ 
     padding-top:10px; 

    } 
    .tearsheets li a:hover span img{ 
     max-height:180px; 
    } 

如果有人可以幫助我這個這將是驚人的,如果它適用於IE8-9甚至更好 - 我不要擔心現階段的IE8動畫。

非常感謝。

回答

1

當然可以。這是result

我做了什麼。

第一個: HTML保持不變。

二:對CSS我發明你<li>兩大類:last-xlast-y。第一種方法是,它沒有任何項目(即使在列表的末尾)。第二個是相同的,但是垂直看。

CSS代碼:

.tearsheets li.last-x a:hover{ left: -161px; } 
.tearsheets li.last-y a:hover{ top: -111px; } 

三:加入jQuery和灑一些jQuery的魔術就可以了。

<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script> 
<script> 
$(function() { 
    var $tearsheets = $(".tearsheets"); 
    var line_length = Math.floor($tearsheets.width()/$tearsheets.find("li:first").width()); 
    var items_count = $tearsheets.find("li").length; 
    var full_lines_count = Math.floor(items_count/line_length); 
    var index = 0; // somehow the internal index inside .each() doesn't work :-/ 
    $tearsheets.find("li").each(function(i) { 
     var item_position = i + 1; 
     var items_on_the_right = line_length - (i % line_length) - 1; 
     //console.log(items_on_the_right + ", " + items_count + ", " + item_position); 
     if (items_on_the_right > (items_count - item_position)) 
      items_on_the_right = items_count - item_position; 
     if (items_on_the_right == 0) 
      $(this).addClass("last-x"); 

     var current_line = Math.ceil(item_position/line_length); 
     $(this).attr("data-current-line", current_line); 
     if (current_line >= full_lines_count) 
      $(this).addClass("last-y"); 
    }); 
}); 
</script> 
+0

這可以工作,除非在函數運行後調整窗口大小。當窗口調整大小時,您可能需要再次調用它。 – Shmiddty

+0

開發人員調整窗口大小。您看到用戶調整窗口大小多少次? :) –

+0

嗨,感謝這看起來真的很好 - 我唯一的問題是,第一行最後一個col不做,第三行最後col和第一col最後一行。有沒有什麼辦法讓這些動畫從正確的角落?很高興知道它可以完成:) –

0

我認爲最好的方法是使用CSS3。您只需添加以下內容即可:

ul.tearsheets > li:nth-child(even):hover { 
    position:relative; 
    right:161px; 
} 

這裏是jsfiddle

隨着li將從右向左移動,但我真的不知道這是你想要的。您可以通過添加以下屬性改變這種行爲:

transition:none; 
-webkit-transition: none; 
-moz-transition:none; 
-o-transition:none; 

這裏jsfiddle

請注意,因爲我使用了CSS3選擇器,所以此解決方案在舊版瀏覽器(例如IE8)中不起作用。

+0

感謝你 - 不幸的是,過渡並不順利,我得到了一個抖動圖像左側,然後右:s –

3

相同的思路duality_,但執行的方式有點不同:Demo

新建CSS:

.tearsheets li.right a:hover { 
    right: 0; 
} 
.tearsheets li.bottom a:hover { 
    bottom: 0; 
} 

JS(使用jQuery):

function adjust() { 
    $('ul.tearsheets').each(function() { 
    var items = $(this).children(), 
     num_items = items.length, 
     num_per_row, i, n; 

    if (num_items) { 
     items.removeClass('right bottom'); 

     // find number of items per row 
     n = 0; 
     items.each(function (i) { 
     var l = $(this).position().left; 
     if (l <= n) { 
      num_per_row = i; 
      return false; 
     } else { 
      n = l; 
     } 
     }); 

     // apply 'right' class to the last column of items 
     if (num_per_row > 1) { 
     for (i = num_per_row - 1; i < num_items; i += num_per_row) { 
      items.eq(i).addClass('right'); 
     } 
     } 

     // apply 'bottom' class to last row of items 
     n = items.eq(-1).position().top; 
     if (items.eq(0).position().top < n) { 
     $(items.get().reverse()).each(function() { 
      var item = $(this), t = item.position().top; 
      if (t == n) { 
      item.addClass('bottom'); 
      } else { 
      return false; 
      } 
     }); 
     } 
    } 
    }); 
} 

$(window).on('resize', adjust); 
adjust(); 
+0

這看起來不錯,但圖像又試圖先離開:s也許它不能完成 - 謝謝你的回答 –

+0

你的意思是「圖像試圖先離開」是什麼意思? –

+0

當你懸停時 - 圖像右移的時候會有一瞬間(對不起這些不好),然後快速移動到它應該在的位置,有沒有讓它先離開而不是正確的?對不起,它也可能是我的瀏覽器:s –

2

不要浪費的JavaScript。這更直接一點。

.tearsheets li:nth-of-type(even) > a:hover { 
    left:-160px; 
    } 

只需將其添加到您的CSS並完成。

+0

謝謝我會嘗試,讓你知道 –