jquery動畫 -- 7.會移動的背景,講解div+css動畫原理


  今天課程介紹的是移動的背景,順便講解下div+css動畫的原理。首先還是先介紹如何制作移動的背景效果。

  html代碼比較簡單,我就全貼出來了,稍后介紹js的實現。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        header
        {
            display: block;
            width: 660px;
            height: 380px;
            margin: auto;
            background: url(img/header.jpg) repeat 0 0;
        }
    </style>
</head>
<body>
    <header>
    </header>
</body>
</html>

  頁面里面包含一個header標簽,設置了他的css效果,指定了css背景圖片和圖片的偏移量。接下來我們要做的就是,通過修改背景偏移量來實現背景移動的效果。這里我們要使用到css的background-position屬性。大家可以到 http://www.w3school.com.cn/css/pr_background-position.asp,了解相關信息。

  我們看到上面css中定義了 background: url(img/header.jpg) repeat 0 0; 其中的0 0就是背景圖片的定位信息,我們接下來就是通過修改第一個0,來實現背景圖片向左移動的動畫效果。如果想實現相上下移動的效果,需要修改第二個0。我們來看js代碼:

//獲取header對象
var header = $('header');
//設置背景初始值
header.css('backgroundPosition', '0 0');

//定義動畫函數
var bgscroll = function () {
    //獲取當前x軸位置
    var current = parseInt(header.css('backgroundPosition').split(' ')[0]),
    //設置新位置
    newBgPos = (current - 1) + 'px 0px';
    //將變量賦值給css的background-position屬性
    header.css('backgroundPosition', newBgPos);
};

//定義循環
setInterval(bgscroll, 75);

  代碼很簡單,就是定義一個循環事件,每隔75毫秒去執行一次bgscroll,bgscroll每次獲取背景當前的x軸位置,執行-1操作,再把新值賦給css的background-position屬性。連貫的執行bgscroll函數的結果就是,背景圖片不斷的向左移動。如果想實現向右移動,需要把-1的操作修改成+1操作。

  其實div+css動畫的原理很簡單(這里講的不是利用css的transition來實現動畫),就是通過設置setInterval每隔幾毫秒執行一個動畫函數(有了setInterval就能實現自動的效果;當然你也可以不去設置setInterval而去設置某個html元素的click等事件,該事件里面去執行動畫函數,這樣就實現了手工動畫的效果)。動畫函數要做的就是去修改html元素的css屬性值,有時候是修改background-position,更多的時候是修改left或者top屬性值。通過對他們進行增減的操作,就實現了html元素在頁面中上下左右位置的變化。left屬性值可以參考這個站點:http://www.w3school.com.cn/css/pr_pos_left.asp

  當然,光對html元素的left,top進行賦值有時候是不夠的,根據情況的需要可能還需要對他們的position屬性進行操作,以達到合理的布局效果。大家可以參照這里學習position屬性:http://www.w3school.com.cn/css/css_positioning.asp。

   把position,left等css屬性掌握透徹,返回頭再去看這個系列之前的文章,我想你一定能明白之前的動畫是如何實現的了。

  希望這篇文章對你理解jquery動畫效果的實現由一定的幫助作用。demo下載地址:jquery.animate.animated-header.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM