時間軸效果解析

来源:http://www.cnblogs.com/cby-love/archive/2017/06/18/7045091.html
-Advertisement-
Play Games

雖然時間軸早已不是什麼新鮮事物了,個人只是感興趣所以就研究一下,最近從網上搜索了一個個人感覺比較好的時間軸demo,下載下來研究了一下並做了下修改.具體的效果如下圖:(該demo實現的是滾動載入圖片) 代碼地址:http://files.cnblogs.com/files/cby-love/html ...


雖然時間軸早已不是什麼新鮮事物了,個人只是感興趣所以就研究一下,最近從網上搜索了一個個人感覺比較好的時間軸demo,下載下來研究了一下並做了下修改.具體的效果如下圖:(該demo實現的是滾動載入圖片)

代碼地址:http://files.cnblogs.com/files/cby-love/html5響應式時間軸.zip

如何實現滾動載入圖片的?最主要是以下的代碼部分:

(function() {
  $(document).ready(function() {
    var timelineAnimate;
    timelineAnimate = function(elem) {
      return $(".timeline.animated .timeline-row").each(function(i) {
        var bottom_of_object, bottom_of_window;
        bottom_of_object = $(this).position().top + $(this).outerHeight();
        bottom_of_window = $(window).scrollTop() + $(window).height();
        if (bottom_of_window > bottom_of_object) {
          return $(this).addClass("active");
        }
      });
    };
    timelineAnimate();
    return $(window).scroll(function() {
      return timelineAnimate();
    });
  });

}).call(this);

因為我們的樣例中實際上還不是純粹的動態載入圖片(即動態生成html標簽和dom元素,後續可以再去實現),只是把原來頁面中的隱藏或者說把opacity屬性值由0變為1了.通過看以上代碼,這個地方實際上是有個小演算法的.

if (bottom_of_window > bottom_of_object) 才會去給當前對象(即類控制器為.timeline.animated .timeline-row的對象)添加類選擇器active(暫且先不具體該類選擇器實現什麼效果)
我們先討論下這兩個值bottom_of_window和bottom_of_object
bottom_of_window = $(window).scrollTop() + $(window).height();
$(window).scrollTop()表示當前滾動條的位置距離頁面頂端的距離,其實可以理解為頁面滾動條拉到某個位置,頂部隱藏的頁面內容的高度;
$(window).height()表示當前可視頁面區域的高度;

bottom_of_object = $(this).position().top + $(this).outerHeight();

$(this).position().top表示當前元素距離父元素的距離,個人理解為應該就是margintop的值吧,
$(this).outerHeight()表示當前元素的高度還有padding+border,但不包括margin
如下盒子模型:


當if (bottom_of_window > bottom_of_object)為真的情況下,我們看到執行了return $(this).addClass("active"),這段代碼起什麼作用呢,其實作用就是
用戶在拖動滾動條時時間軸內容的過渡效果,我們可以看到添加效果是向.timeline.animated .timeline-row添加的,我們查看樣式文件關於這個類選擇器的所在對象都有什麼
樣式效果:
.timeline.animated .timeline-row .timeline-content {
    opacity: 0;
    left: 20px;
    -webkit-transition: all 0.8s;
    -moz-transition: all 0.8s;
    transition: all 0.8s; }
  .timeline.animated .timeline-row:nth-child(odd) .timeline-content {
    left: -20px; }
  .timeline.animated .timeline-row.active .timeline-content {
    opacity: 1;
    left: 0; }
  .timeline.animated .timeline-row.active:nth-child(odd) .timeline-content {
    left: 0; }

很明顯在執行$(this).addClass("active")之後,以下樣式起作用了.

.timeline.animated .timeline-row.active .timeline-content {
    opacity: 1;
    left: 0; }

為什麼會有一個過渡的飄入效果呢,其實就是定義了

.timeline.animated .timeline-row .timeline-content {
    opacity: 0;
    left: 20px;
    -webkit-transition: all 0.8s;
    -moz-transition: all 0.8s;
    transition: all 0.8s; }

transition(css3標簽)定義了類選擇器.timeline.animated .timeline-row .timeline-content的包含對象只有有任何樣式更改都會有一個0.8.s時間的過渡效果,當然這個時間

我們可以重新去修改。

因為我們在執行$(this).addClass("active")之前,我們時間軸左邊的對象的樣式如下(我們暫且先說時間軸左邊的)

.timeline.animated .timeline-row:nth-child(odd) .timeline-content {
opacity: 0;

left: -20px; }

執行之後樣式如下:

.timeline.animated .timeline-row.active .timeline-content {
    opacity: 1;
    left: 0; }

所以會有一個從左到右的一個實現效果,因為透明度和左邊距都變了。

 

時間軸右邊的對象為什麼是從右到左的一個切入效果呢,首先執行$(this).addClass("active")之前,時間軸右邊對象樣式為

.timeline.animated .timeline-row .timeline-content {
    opacity: 0;
    left: 20px;
    -webkit-transition: all 0.8s;
    -moz-transition: all 0.8s;
    transition: all 0.8s; }

我們看到left為20px,opacity(透明度為0),執行$(this).addClass("active")之後

 .timeline.animated .timeline-row.active .timeline-content {
    opacity: 1;
    left: 0; }

left為0,opacity(透明度為1),transition為0.8s,所以有一個從右到左的一個過渡效果了.

以上代碼有一個考究的地方

.timeline-row:nth-child(odd)中的nth-child(odd)選擇器,因為css的解析順序是從右到左,所以這個地方的意思表示.timeline-row為奇數的對象(屬於其父元素的第奇數個timeline-row)
假如有以下代碼,
<!DOCTYPE html>
<html>
<head>
<style> 
p:nth-child(2)
{
background:#ff0000;
}
</style>
</head>
<body>

<h1>這是標題</h1>
<p>第一個段落。</p>
<p>第二個段落。</p>
<p>第三個段落。</p>
<p>第四個段落。</p>

<p><b>註釋:</b>Internet Explorer 不支持 :nth-child() 選擇器。</p>

</body>
</html>

 其中p:nth-child(2)表示p的父元素中第二個子元素,並且這個子元素是p,這時候第二個子元素正好是P所以顯示效果如下

如果改為以下

<h1>這是標題</h1>
<h2>第一個段落。</h2>
<p>第二個段落。</p>
<p>第三個段落。</p>
<p>第四個段落。</p>

這時候效果如下

因為p:nth-child(2)第二個子元素是h2,而不是p所以沒找到匹配的元素,所以背景色也沒生效.

先研究到這裡,後續有時間準備讓頁面元素動態載入,而不是在頁面上早早顯示出來,只是通過控制透明度來顯示或者隱藏.

 



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 把下麵的配置複製到 .m2/settings.xml配置文件中。 github地址:https://github.com/ae6623/Zebra/blob/master/maven-repo-settings-ali.xml 阿裡maven倉庫地址:http://maven.aliyun.com/ ...
  • 『設計模式』中有一個模式可以解釋特定的語法規則,它就是解釋器模式(Interpreter Pattern)。不同於常見的策略模式或者是工廠模式,解釋器模式在.NET或者JDK中並不常見,而且在業務上也很少會去解釋特定的語法,所以它並不被廣泛使用。一個解釋器可大可小,大可以是複雜的編譯器,小也可以是一 ...
  • 隊列 定義 :隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(head)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。 按照隊列的定義,結合記憶體地址的理解,初始化隊列的時候,準備 和`rear ...
  • A 調用攝像頭拍照,自定義裁剪編輯頭像,頭像圖片色度調節B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本,處理類,service等完整模塊C 集成阿裡巴巴資料庫連接池 ...
  • css選擇器一個可以選擇樣式的工具, 這裡適用於無論是內部代碼還是外部引用 abc.css 這類型的文件. 基本選擇器*{ }就是一個簡單的*, 代表應用於全部. 不適合於個性化細緻化處理的頁面, 副作用是它會覆蓋原有的style, 不管好壞 *和繼承無關, 無論是否一級標簽,是否子標簽, 一律收到... ...
  • ES 2015/6 新增內容還是比較多的,這裡僅大綱性的列舉一下(不一定全面)這些特性。其實,每個點挖進去都會有很多學問在裡頭,本文旨在彙總,所以不對這些特性進行深層次的討論及研究。隨後有時間的話,在單獨寫幾篇博客對常用的點進行深挖,與大家進行深度交流。 ...
  • ::before與::after兩個偽元素其實是CSS3中的內容,然而實際上在CSS2中就已經有了這兩者的身影,只不過CSS2中是前面加一個冒號來表示(:before和:after)。今天主要講講這兩個偽元素該如何使用。 一、與普通元素一樣可以給其添加樣式 比如說我想在文字前面添加一個圖標,如果我用 ...
  • 本文提到的網站性能指網站的響應速度,這也符合絕大部分人對於網站性能的理解:訪問快速的網站性能好,反之,訪問速度越慢,則網站性能越差。本文總結的優化方法是巨集觀的工程層面的方法,並不包含微觀的語言語法層面的方法,例如,JS、CSS的語法優化,這一部分同樣影響網站的性能,但語言語法層面的優化更多的是取決於 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...