1. 程式人生 > 程式設計 >原生JS實現酷炫分頁效果

原生JS實現酷炫分頁效果

本文例項為大家分享一個如下效果的分頁特效,是不是很酷炫。

原生JS實現酷炫分頁效果

以下是程式碼實現:

<!DOCTYPE html>
<html>
 
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>原生JS實現酷炫分頁</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
 
        li {
            list-style: none;
        }
 
        #ul1 {
            width: 600px;
            height: 250px;
        }
 
        #ul1 li {
            width: 100px;
            height: 100px;
            background: red;
            float: left;
            overflow: hidden;
            margifbHGQhGS
n: 10px; } a { margin: 5px; } </style> <!-- 引入運動函式 --> <script type="text/" src="js/move.js"></script> <script> window.onload = function () { var json = { title: [ '效果1','效果2','效果3','效果4','效果5','效果6','效果7','效果8','效果9','效果10','效果11','效果12','效果13','效果14','效果15','效果16','效果17','效果18','效果19','效果20','效果21','效果22','效果23','效果24','效果25','效果26','效果27','效果28','效果29','效果30','效果31','效果32','效果33','效果34' ] }; //建立陣列,儲存佈局座標 var arr = []; //從最後一個li開始運動,下標為9 var iNow = 9; page({ id: 'div1',nowNum: 1,//計算總頁數,除以10並向上取整 allNum: Math.ceil(json.title.length / 10),callBack: function (now,all) { //如果當前頁乘以10小於json.title.length,載入10條 //如果當前頁乘以10大於json.title.length,載入本例中剩於的4條 var num = now * 10 < json.title.length ? 10 : json.title.length - (now - 1) * 10; //獲取ul var oUl = document.getElementById('ul1'); //獲取li var aLi = oUl.getElementsByTagName('li'); //如果不前ul裡面的的內容為空 if (oUl.innerHTML == '') { //迴圈num次 for (var i = 0; i < num; i++) { //建立li var oLi = document.createElement('li'); //設定li的內容,如果now為0,那麼[(now-1)*10 + i]從第1個分配內容 //設定li的內容,如果now為1,那麼[(now-1)*10 + i]從第11個分配內容 oLi.innerHTML = json.title[(now - 1) * 10 + i]; //將li新增到ul中 oUl.appendChild(oLi); } //迴圈遍歷 for (var i = 0; i < aLi.length; i++) { //向arr中壓入每個li的left和top值 arr.push([aLi[i].offsetLeft,aLi[i].offsetTop]); } //迴圈遍歷 for (var i = 0; i < aLi.length; i++) { //修改每個li的定位為絕對定位 aLi[i].style.position = 'absolute'; //重新分配left的值 aLi[i].style.left = arr[i][0] + 'px'; //重新分配top的值 aLi[i].style.top = arr[i][1] + 'px'; //把影響定位的margin值歸0 aLi[i].style.margin = 0; } } else { //設定定時器,依次執行每個效果的動畫 var timer = setInterval(function () { //執行move.js中的strartMove函式,從下標為iNow的li開始,修改left/top/opacity值 startMove(aLi[iNow],{ left: 200,top: 250,opacity: 0 }); //當運動的li為最後一個時 if (iNow == 0) { //清除定時器 clearInterval(timer); //iNow下標值為當前載入數量減1,本例中載入10條為9,載入4條為3 iNow = num - 1; //點選標籤頁時,更換顯示內容 for (var i = 0; i < num; i++) { aLi[i].innerHTML = json.title[(now - 1) * 10 + i]; } //設定彈出的定時器 var timer2 = setInterval(function () { //執行move.js中的strartMove函式,從下標為iNow的li開始 //將每個li的屬性值還原到第一次運動前儲存的值 startMove(aLi[iNow],{ left: arr[iNow][0],top: arr[iNow][1],opacity: 100 }); //當運動的li為最後一個時 if (iNow == 0) { //清除定時器 clearInterval(timer2); //iNow下標值為當前載入數量減1,本例中載入10條為9,載入4條為3 iNow = num - 1; } else { //iNow遞減,依次執行 iNow--; } },100); } else { //iNow遞減,依次執行 iNow--; } },100); } } }); }; function page(opt) { if (!opt.id) { return f
alse }; var obj = document.getElementById(opt.id); var nowNum = opt.nowNum || 1; var allNum = opt.allNum || 5; var callBack = opt.callBack || function () { }; if (nowNum >= 4 && allNum >= 6) { var oA = document.createElement('a'); oA.href = '#1'; oA.innerHTML = '首頁'; obj.appendChild(oA); } if (nowNum >= 2) { var oA = document.createElement('a'); oA.href = '#' + (nowNum - 1); oA.innerHTML = '上一頁'; obj.appendChild(oA); } www.cppcns.com
if (allNum <= 5) { for (var i = 1; i <= allNum; i++) { var oA = document.createElement('a'); oA.href = '#' + i; if (nowNum == i) { oA.innerHTML = i; } else { oA.innerHTML = '[' + i + ']'; } obj.appendChild(oA); } } else { for (var i = 1; i <= 5; i++) { var oA = document.createElement('a'); if (nowNum == 1 || nowNum == 2) { oA.href = '#' + i; if (nowNum == i) { oA.innerHTML = i; } else { oA.innerHTML = '[' + i + ']'; } } else if ((allNum - nowNum) == 0 || (allNum - nowNum) == 1) { oA.href = '#' + (allNum - 5 + i); if ((allNum - nowNum) == 0 && i == 5) { oA.innerHTML = (allNum - 5 + i); } else if ((allNum - nowNum) == 1 && i == 4) fbHGQhGS{ oA.innerHTML = (allNum - 5 + i); } else { oA.innerHTML = '[' + (allNum - 5 + i) + ']'; } } else { oA.href = '#' + (nowNum - 3 + i); if (i == 3) { oA.innerHTML = (nowNum - 3 + i); } else { oA.innerHTML = '[' + (nowNum - 3 + i) + ']'; } } obj.appendChild(oA); } } if ((allNum - nowNum) >= 1) { var oA = document.createElement('a'); oA.href = '#' + (nowNum + 1); oA.innerHTML = '下一頁'; obj.appendChild(oA); } if ((allNum - nowNum) >= 3 && allNum >= 6) { var oA = document.createElement('a'); oA.href = '#' + allNum; oA.innerHTML = '尾頁'; obj.appendChild(oA); } callBack(nowNum,allNum); var aA = obj.getElementsByTagName('a'); for (var i = 0; i < aA.length; i++) { aA[i].onclick = function () { var nowNum = parseInt(this.getAttribute('href').substring(1)); obj.innerHTML = ''; page({ id: opt.id,nowNum: nowNum,allNum: allNum,callBack: callBack }); return false; }; } } </script> </head> <body> <ul id="ul1"></ul> <div id="div1"></div> </body> </html>

引入的運動函式程式碼:

function startMove(obj,json,endFn) { 
    clearInterval(obj.timer); 
    obj.timer = setInterval(function () { 
        var bBtn = true; 
        for (var attr in json) {
 
            var iCur = 0;
 
            if (attr == 'opacity') {
                if (Math.round(parseFloat(getStyle(obj,attr)) * 100) == 0) {
                    iCur = Math.round(parseFloat(getStyle(obj,attr)) * 100);
 
                } else {
                    iCur = Math.round(parseFloat(getStyle(obj,attr)) * 100) || 100;
                }
            } else {
                iCur = parseInt(getStyle(obj,attr)) || 0;
            }
 
            var iSpeed = (json[attr] - iCur) / 3;
            iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
            if (iCur != json[attr]) {
                bBtn = false;
            }
 
            if (attr == 'opacity') {
                obj.style.filter = 'alpha(opacity=' + (iCur + iSpeed) + ')';
                obj.style.opacity = (iCur + iSpeed) / 100;
 
            } else {
                obj.style[attr] = iCur + iSpeed + 'px';
            }
 
        }
 
        if (bBtn) {
            clearInterval(obj.timer);
 
            if (endFn) {
                endFn.call(obj);
            }
        }
 
    },30);
 
}
 
 
function getStyle(obj,attr) {
    if (obj.currentStyle) {
        return obj.currentStyle[attr];
    }
    else {
        return getComputedStyle(obj,false)[attr];
    }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。