前端基本功:JS案例(七) 動(dòng)畫: 輪播圖 (勻緩)、焦點(diǎn)圖

無縫滾動(dòng)

原理:
首先先復(fù)制 兩張圖片 (第一張和第二張) 放到最后面 (本質(zhì)上是第 5.6張)

ul 是盒子移動(dòng)的扫茅, 如果ul 的left 值 大于等于 4張圖片的寬度蹋嵌,就應(yīng)該快速復(fù)原為0 。

案例:

無縫滾動(dòng)诞帐,鼠標(biāo)放上時(shí)停止欣尼,移開則繼續(xù)滾動(dòng).gif

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{margin:0;padding:0;}
        ul{list-style:none;}
        img {vertical-align: top; }  /*取消圖片底部3像素距離*/
        .box {
            width: 600px;
            height: 200px;
            margin: 100px auto;
            background-color: pink;
            position: relative;
            overflow: hidden;
        }
        .box ul li {
            float: left;
        }
        .box ul {
            width: 400%;
            position: absolute;
            left: 0;
            top: 0;
        }
    </style>
</head>
<body>
<div class="box" id="scroll">
    <ul>
        <li><img src="images/01.jpg" alt=""/></li>
        <li><img src="images/02.jpg" alt=""/></li>
        <li><img src="images/03.jpg" alt=""/></li>
        <li><img src="images/04.jpg" alt=""/></li>
        <li><img src="images/01.jpg" alt=""/></li>
        <li><img src="images/02.jpg" alt=""/></li>
    </ul>
</div>
</body>
</html>
<script>
    var scroll = document.getElementById("scroll");
    var ul = scroll.children[0];
    var num = 0; //控制左側(cè)值  left
    var timer = null;  // 定時(shí)器
    timer = setInterval(autoPlay,20);
    function autoPlay() {
        num--;
        //console.log(num);
        num<=-1200 ? num = 0 : num;
        ul.style.left = num + "px";
    }
    scroll.onmouseover = function() {  // 鼠標(biāo)經(jīng)過大盒子  停止定時(shí)器
        clearInterval(timer);
    }
    scroll.onmouseout = function() {
        timer = setInterval(autoPlay,20);  // 開啟定時(shí)器
    }

</script>

勻速動(dòng)畫

勻速動(dòng)畫.gif

勻速動(dòng)畫源碼:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box {
            position: absolute;
            top:100px;
            left:0;
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>
<button id="btn">開始</button>
<div class="box" id="bOX">
</div>
</body>
</html>
<script>
    var btn = document.getElementById("btn");
    var box = document.getElementById("bOX");
    var num = 0;
    var timer = null;
    btn.onclick = function() {
        timer = setInterval(function(){
            num++;
            if(num >=500)
            {
                clearInterval(timer);
            }
            else
            {
                box.style.left = num + "px";
            }
        },10)
    }
</script>

緩動(dòng)動(dòng)畫

勻速動(dòng)畫,看起來停蕉,效果太簡單。
緩動(dòng)動(dòng)畫公式:
一個(gè)盒子初始值 是 0 要走到 400 px 的位置
假如說钙态,初始值 leader 0 target 400
box.style.left = xxxx + “px”

leader = leader + (target - leader ) /10 ;

緩動(dòng)動(dòng)畫如下效果:


緩動(dòng)動(dòng)畫.gif
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box {
            position: absolute;
            top:100px;
            left:0;
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>

<button id="btn">開始</button>
<div class="box" id="bOX"></div>
</body>
</html>
<script>
    var btn = document.getElementById("btn");
    var box = document.getElementById("bOX");
    var timer = null;
    var leader = 0;
    var target = 500;
    btn.onclick = function() {
        setInterval(function(){
            leader = leader + (target - leader )/10;
            box.style.left = leader + "px";
        },30)
    }
</script>

焦點(diǎn)圖:

焦點(diǎn)圖.gif
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{margin: 0; padding: 0;}
        ul,ol{list-style:none;}
        img {
            display: block;  /* 清除圖片底冊(cè) 3像素縫隙*/
        }
        .slider {
            width: 490px;
            height: 170px;
            border:1px solid #ccc;
            margin: 100px auto;
            padding:5px;
            position: relative;
        }
        .inner {
            width: 100%;
            height: 100%;
            background-color: pink;
            position: relative;
            /*overflow: hidden*/
        }
        .inner ul {
            width: 1000%;
            position: absolute;
            top: 0;
            left: 0;
        }
        .inner ul li {
            float: left;
        }
        .slider ol {
            position: absolute;
            left: 50%;
            margin-left: -80px;
            bottom: 10px;

        }
        .slider ol li{
            float: left;
            width: 18px;
            height: 18px;
            background-color: #fff;
            margin-right: 10px;
            text-align: center;
            line-height: 18px;
            cursor: pointer;
        }
        .slider ol li.current {
            background-color: orange;
        }
    </style>
</head>
<body>
<div class="slider" id="jd">
    <div class="inner">
        <ul>
            <li><a href="#"><img src="images/01.jpg" alt=""/></a></li>
            <li><a href="#"><img src="images/02.jpg" alt=""/></a></li>
            <li><a href="#"><img src="images/03.jpg" alt=""/></a></li>
            <li><a href="#"><img src="images/04.jpg" alt=""/></a></li>
            <li><a href="#"><img src="images/05.jpg" alt=""/></a></li>
        </ul>
    </div>
    <ol>
        <li class="current">1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ol>
</div>
</body>
</html>
<script>
    var  jd = document.getElementById("jd");
    var ul = jd.children[0].children[0];
    var ol = jd.children[1];
    var olLis = ol.children;
    var leader = 0, target = 0;  // target 目標(biāo)位置
    for(var i=0; i<olLis.length; i++)
    {
        olLis[i].index = i;  // 每個(gè)li 的索引號(hào)
        olLis[i].onmouseover = function() {
            for(var j=0;j<olLis.length;j++)
            {
                olLis[j].className = "";
            }
            this.className = "current";
            target = -this.index * 490; // 目標(biāo)位置 就是用當(dāng)前的索引號(hào)乘以  一個(gè)盒子的寬度
        }
    }
    setInterval(function() {
        leader = leader + (target - leader ) / 10;
        ul.style.left = leader + "px";
    },30);


</script>
左右輪播圖.gif
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標(biāo)題文檔</title>
<style type="text/css">
body,ul,ol,li,img{margin:0;padding:0;list-style:none;}
#box{width:490px;height:170px;padding:5px;
    position: relative;border:1px solid #ccc;margin:100px auto 0;overflow:hidden;}
.ad{width:490px;height:170px;overflow:hidden;position:relative;}
#box img{width:490px;}
.ad ol{position:absolute;right:10px;bottom:10px;}
.ad ol li{width:20px;height:20px;line-height:20px;border:1px solid #ccc;text-align:center;background:#fff;float:left;margin-right:10px;cursor:pointer;_display:inline;}
.ad ol li.current{background:yellow;}
.ad ul li{float:left;}
.ad ul{ position:absolute; top:0; width:2940px;}
.ad ul li.current{display:block;}
#arr {
    display: none;}
#arr span{ width:40px; height:40px; position:absolute; left:5px; top:50%; margin-top:-20px; background:#000; cursor:pointer; line-height:40px; text-align:center; font-weight:bold; font-family:'黑體'; font-size:30px; color:#fff; opacity:0.3; border:1px solid #fff;}
#arr #right{right:5px; left:auto;}
</style>
</head>
<body>
    <div id="box" class="all">
      <div class="ad">
        <ul id="imgs">
          <li><img src="images/1.jpg" /></li>
          <li><img src="images/2.jpg" /></li>
          <li><img src="images/3.jpg" /></li>
          <li><img src="images/4.jpg" /></li>
          <li><img src="images/5.jpg" /></li>
        </ul>
      </div>
        <div id="arr"><span id="left"><</span><span id="right">></span></div>
    </div>
</body>
</html>
<script>
    function $(id) {return document.getElementById(id)}
    var box = document.getElementById("box");
    box.onmouseover = function() {
        $("arr").style.display = "block";
    }
    box.onmouseout = function() {
        $("arr").style.display = "none";
    }

    $("right").onclick = function() {
        target -= 490;
    }
    $("left").onclick = function() {
        target += 490;
    }

    //緩動(dòng)動(dòng)畫
    var leader = 0,target = 0;
    setInterval(function() {
        if(target >= 0)
        {
            target = 0;
        }
        else if(target <= -1960)
        {
            target = -1960;
        }
        leader = leader + (target - leader) / 10;
        $("imgs").style.left = leader + "px";
    },30)
</script>

以上素材圖片獲然燮稹:
鏈接:http://pan.baidu.com/s/1i5foF45 密碼:l1hu

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市册倒,隨后出現(xiàn)的幾起案子蚓挤,更是在濱河造成了極大的恐慌,老刑警劉巖驻子,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灿意,死亡現(xiàn)場離奇詭異,居然都是意外死亡崇呵,警方通過查閱死者的電腦和手機(jī)缤剧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來域慷,“玉大人荒辕,你說我怎么就攤上這事汗销。” “怎么了抵窒?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵弛针,是天一觀的道長。 經(jīng)常有香客問我李皇,道長削茁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任掉房,我火速辦了婚禮茧跋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘圃阳。我一直安慰自己厌衔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布捍岳。 她就那樣靜靜地躺著富寿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锣夹。 梳的紋絲不亂的頭發(fā)上页徐,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音银萍,去河邊找鬼变勇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贴唇,可吹牛的內(nèi)容都是我干的搀绣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼戳气,長吁一口氣:“原來是場噩夢啊……” “哼链患!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瓶您,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤麻捻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后呀袱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贸毕,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年夜赵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了明棍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡油吭,死狀恐怖击蹲,靈堂內(nèi)的尸體忽然破棺而出署拟,到底是詐尸還是另有隱情,我是刑警寧澤歌豺,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布推穷,位于F島的核電站,受9級(jí)特大地震影響类咧,放射性物質(zhì)發(fā)生泄漏馒铃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一痕惋、第九天 我趴在偏房一處隱蔽的房頂上張望区宇。 院中可真熱鬧,春花似錦值戳、人聲如沸议谷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卧晓。三九已至,卻和暖如春赴捞,著一層夾襖步出監(jiān)牢的瞬間逼裆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工赦政, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胜宇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓恢着,卻偏偏與公主長得像桐愉,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掰派,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容