vue+原生js手寫(xiě)分頁(yè)

本文只是一個(gè)簡(jiǎn)單地DEMO,所以不會(huì)用vue全家桶去構(gòu)建一個(gè)工程。

一、引入vue.js
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
二、分頁(yè)css(包含一些簡(jiǎn)單地動(dòng)畫(huà)效果)
.pagewrap {
    padding: 25px 0;
    -webkit-user-select: none;
    user-select: none;
    width: 100%;
    color: #666;
    text-align: center;
    font-size: 14px;
}

.pagewrap i {
    height: 34px;
    padding: 0;
    border: 1px solid #ccc;
    line-height: 34px;
    border-radius: 3px;
    width: 34px;
    display: inline-block;
    cursor: pointer;
    margin: 0 4px;
    vertical-align: middle;
}

.pagewrap i.button {
    width: 68px;
}

.pagewrap i:hover {
    border-color: #fdb800;
    color: #fdb800;
    animation: buttonshake .4s ease-out forwards;
}

.pagewrap i.current:hover, i.current, i.button:hover {
    border-color: #fdb800;
    color: #fdb800;
    animation: none;
}

.pagewrap i.disabled, i.disabled:hover {
    background: #EFEFEF;
    border-color: #EFEFEF;
    color: #AAA;
    cursor: text;
    animation: none;
}

.pagewrap i.ellipsis, i.ellipsis:hover {
    background: none;
    border-color: #FFF;
    color: #AAA;
    cursor: text;
    animation: none;
}

@-webkit-keyframes buttonshake {
    25% {
        -webkit-transform: rotate(45deg);
    }
    75% {
        -webkit-transform: rotate(-45deg);
    }
    100% {
        -webkit-transform: rotate(0deg);
    }
}

@keyframes buttonshake {
    25% {
        transform: rotate(45deg);
    }
    75% {
        transform: rotate(-45deg);
    }
    100% {
        transform: rotate(0deg);
    }
}
三、分頁(yè)html(for循環(huán)生成分頁(yè)按鈕和樣式條件)
<div id="app">
    <div class="pagewrap">
        <i v-for="button in page.buttons"
           :class="{button: button.button, disabled: button.disabled, current: button.current, ellipsis: button.ellipsis}"
           @click="button.current || button.ellipsis || button.disabled || loadList(button.number);">
            {{button.title}}
        </i>
    </div>
</div>
四、分頁(yè)js(可以嘗試傳入不同參數(shù)打印buttons)
var app = new Vue({
   el: '#app',
   data: {
       page: {}
   },
   methods: {
       pagination(current, total) {
           var buttons = [];
           if (total) {
               var last = {
                   title: '上一頁(yè)',
                   disabled: !(current > 0),
                   button: 1,
                   number: current - 1,
                   log: '{"evtname":"上一頁(yè)","evtvalue":"prev"}'
               };
               var next = {
                   title: '下一頁(yè)',
                   disabled: !(current < total - 1),
                   button: 2,
                   number: current + 1,
                   log: '{"evtname":"下一頁(yè)","evtvalue":"next"}'
               };
               buttons.push(last);
               var i = 0;
               if (total <= 10) {
                   i = 0;
                   for (; i < total; i++) {
                       buttons.push({
                           title: i + 1,
                           number: i,
                           current: current == i
                       });
                   }
               } else if (current < 5) {
                   i = 0;
                   for (; i < 8; i++) {
                       buttons.push({
                           title: i + 1,
                           number: i,
                           current: current == i
                       });
                   }
                   buttons.push({
                       title: '…',
                       ellipsis: 1
                   });
                   buttons.push({
                       title: total,
                       number: total - 1
                   });
               } else if (total - current - 1 < 5) {
                   buttons.push({
                       title: '1',
                       number: 0
                   });
                   buttons.push({
                       title: '…',
                       ellipsis: 1
                   });
                   i = total - 8;
                   for (; i < total; i++) {
                       buttons.push({
                           title: i + 1,
                           number: i,
                           current: current == i
                       });
                   }
               } else {
                   buttons.push({
                       title: '1',
                       number: 0
                   });
                   buttons.push({
                       title: '…',
                       ellipsis: 1
                   });
                   i = current - 2;
                   for (; i < current + 4; i++) {
                       buttons.push({
                           title: i + 1,
                           number: i,
                           current: current == i
                       });
                   }
                   buttons.push({
                       title: '…',
                       ellipsis: 1
                   });
                   buttons.push({
                       title: total,
                       number: total - 1
                   });
               }
               buttons.push(next);
           }
           console.log(buttons);
           return buttons;
       }
   },
   created() {
       // 當(dāng)前第5頁(yè),一共21頁(yè)
       this.page.buttons = this.pagination(5, 21);
    }
})

效果圖(到這里簡(jiǎn)單的樣子已經(jīng)出來(lái)了)

pagination.png
五、配合后臺(tái)數(shù)據(jù),引入axios
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
data: {
    page: {
        number: 0,
        size: 10
    }
},
// methods里添加方法
methods: {
    loadList() {
        // 后端給的url地址,傳參一般是當(dāng)前頁(yè)數(shù)和展示條數(shù)
        axios.post(URL, {
            page: this.page.number || 0,
            size: this.page.size
        })
        .then(data => {
            console.log("加載列表成功");
            // 這里的傳值具體看后端返回?cái)?shù)據(jù)
            this.page.buttons = this.pagination(data.current, data.total);
        })
        .catch(data => {
             console.log("加載列表失敗");
        });
    }
},
// 調(diào)用方法
created() {
     // this.page.buttons = this.pagination(5, 21);
     this.loadList();
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基于Vue的一些資料 內(nèi)容 UI組件 開(kāi)發(fā)框架 實(shí)用庫(kù) 服務(wù)端 輔助工具 應(yīng)用實(shí)例 Demo示例 element★...
    嘗了又嘗閱讀 1,282評(píng)論 0 1
  • ## 框架和庫(kù)的區(qū)別?> 框架(framework):一套完整的軟件設(shè)計(jì)架構(gòu)和**解決方案**。> > 庫(kù)(lib...
    Rui_bdad閱讀 3,150評(píng)論 1 4
  • UI組件 element- 餓了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的組件庫(kù) m...
    小姜先森o0O閱讀 10,110評(píng)論 0 72
  • UI組件 element- 餓了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的組件庫(kù) m...
    柴東啊閱讀 15,960評(píng)論 2 140
  • 好久都沒(méi)有停電了,今天來(lái)找星星小姐玩,卻意外碰見(jiàn)停電,。一瞬間生活好像癱瘓了:路燈不亮了,街道兩旁各色廣告...
    臭美妞Snow閱讀 119評(píng)論 0 0

友情鏈接更多精彩內(nèi)容