最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue分頁組件實現(xiàn)過程詳解

 更新時間:2022年12月09日 16:29:44   作者:阿選不出來  
Web應用程序中資源分頁不僅對性能很有幫助,而且從用戶體驗的角度來說也是非常有用的。在這篇文章中,將了解如何使用Vue創(chuàng)建動態(tài)和可用的分頁組件

HTML代碼

<template>
      <div class="paging" v-if="count">
        <ul>
            <li class="pre" v-show="page > 1" @click="jian()">
                <span>上一頁</span>
            </li>
            <li v-for="(item,index) in pageall" :key="index" 
            :class="{'active': page === item, 'ellipsis': item === '...'}" 
            @click="res_page(item)">
            {{item}}</li>
            <li class="next" v-show="page < totalPages" @click="jia()">
                <span>下一頁</span>
            </li>
        </ul>
        <span class="sum">共 {{totalPages}} 頁, 跳至</span>
        <input type="text" @keyup.enter="activePage($event)">
        <span>頁</span>
    </div>
</template>

組件的一些規(guī)定和條件

我們可以把這個分頁組件分為三種形態(tài)

第一種 總頁數(shù) <=5 的

我們規(guī)定當總頁數(shù)小于5時, 展示出所有的頁碼

第二種 當前頁為第一頁或最后一頁的

當頁碼為第一頁或者最后一頁時, 選擇性的消失 上一頁 或 下一頁 按鈕

第三種 以上兩種都不是的

首先這個分頁組件需要得知三個條件

count(數(shù)據(jù)總數(shù)), page(當前頁數(shù)), page_size(每頁展示的數(shù)量)

prop:['count','page','page_size']

注意: 由于子組件不能直接改變父組件的值, 所以在引用該分頁組件的父組件中,

可以寫入 :changePage.sync=“page”,

每當page改變時 采用this.$emit(“changePage”, value) 傳入value來改變page

創(chuàng)建分頁數(shù)組

在Vue計算屬性中得出總頁數(shù) totalPages

totalPages(){
	return Math.ceil(this.count / this.paeg_size)
}

在Vue計算屬性中得出兩個值, beforePages afterPages 代表最小值與最大值(第一頁與最后一頁除外)

beforePages(){
	return this.page -2
}
afterPages(){   
    return this.page + 2
},

我們規(guī)定總是顯示當前頁的前兩頁和后兩頁.

重點來了, 在Vue屬性中創(chuàng)建分頁數(shù)組

添加第一頁和最后一頁

首先我們規(guī)定的beforePage=page-2, 當beforepage > 1 時, 即page > (1+2) , 這個時候就需要添加第一頁 .

最后一頁同理

什么時候添加省略呢?

我們還規(guī)定當totalPage總頁數(shù)小于等于5頁時,展示所有頁碼 ,

當totalPage > 5,并且beforePage=page-2>=3或者afterPage=page+2<=totalPage-2時添加省略.

當totalPage < 5,如圖所示:

我們需要把前省略替換成2 后省略替換成4

pageall(){
    let arr=[]
    for(let everyPages = this.beforePages; everyPages <= this.afterPages; everyPages++) {
        if(everyPages > this.totalPages) {
            continue;
        }
        if(everyPages <= 0){
            continue;
        }
       arr.push(everyPages)
    }
    // 添加第一頁
    if(this.page > 3 {
        arr.unshift(1)
    }
    // 添加最后一頁
    if(this.page < this.totalPages-2) {
        arr.push(this.totalPages)
    }
    //添加前省略
    if(this.page >= 5) {
    	if(this.totalPages > 5) {
    		arr.splice(1,0,'...')
    	}else{
    		arr.splice(1,0,2)
    	}
    }
    //添加后省略
    if(this.page <= this.totalPages-4) {
    	if(this.totalPages > 5) {
    		arr.splice(arr.length-1,0,"...")
    	}else{
    		arr.splice(arr.length-1,0,4)
    	}
   }
    return arr
}

切換頁碼

現(xiàn)在數(shù)組已經(jīng)完成, 還需要添加上點擊切換頁碼的方法.

點擊下一頁????

jia(){
	this.$emit('update:changepage',  this.page + 1)
}

點擊上一頁????

jian(){
	this.$emit('update:changepage',  this.page - 1)
}

點擊任意一頁

res_page(value){
	if(value!=="..."){
		this.$emit('update:changepage',  value)
	}V
}

在輸入框內(nèi)輸入頁碼,按Enter鍵跳轉

activePage(e){
    if(e.target.value > this.totalPages) {
        this.$emit('update:changepage', this.totalPages)
    }else if(e.target.value <= 0) {
        this.$emit('update:changepage', 1)
    }else{
        this.$emit('update:changepage', e.target.value - 0)
    }
    e.target.value = ""
    e.target.blur()
}

CSS

最后附上CSS代碼

       .paging {
            width: 100%;
            display: flex;
            align-items: center;
            justify-content: center;
            color: #657180;
            ul {
                padding: 5px;
                display: inline-flex;
                background-color: #FFF;
                li {
                    width: 40px;
                    height: 40px;
                    margin: 0 2px;
                    border-radius:5px;
                    border: 1px solid #d7dde4;
                    list-style: none;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                    caret-color: transparent;
                    cursor:pointer;
                }
                li:first-child{
                    width: 80px;
                    border-radius: 40px 0 0 40px;
                    span {
                        color: #000000;
                    }
                }
                li:last-child{
                    width: 80px;
                    border-radius: 0 40px 40px 0;
                    span {
                        color: #000000;
                    }
                }
                li:hover {
                    color: #00a1d6;
                    transition: all 0.5s;
                    border-color: #00a1d6;
                }
                .ellipsis {
                    border: none;
                }
                .ellipsis:hover {
                    color: #657180;
                }
                .active{
                    background-color: #00a1d6;
                    color: #FFF;
                }
            }
            .sum {
                margin-left: 30px;
            }
            span{
                font-size: 13px;
                color: #99a2aa;
            }
            input {
                height: 30px;
                width: 60px;
                border-radius: 5px;
                border: 1px solid #d7dde4;
                margin: 0 10px;
                outline: none;
            }
        }

到此這篇關于Vue分頁組件實現(xiàn)過程詳解的文章就介紹到這了,更多相關Vue分頁組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • react+vite動態(tài)導入報錯@vite-ignore的問題及解決

    react+vite動態(tài)導入報錯@vite-ignore的問題及解決

    這篇文章主要介紹了react+vite動態(tài)導入報錯@vite-ignore的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue.js動態(tài)設置VueComponent高度遇到的問題及解決

    vue.js動態(tài)設置VueComponent高度遇到的問題及解決

    這篇文章主要介紹了vue.js動態(tài)設置VueComponent高度遇到的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue3如何實現(xiàn)變量雙向綁定

    vue3如何實現(xiàn)變量雙向綁定

    這篇文章主要介紹了vue3如何實現(xiàn)變量雙向綁定問題,具有很好的參考價值,希望對大家有所幫助,
    2023-11-11
  • webpack+vue.js構建前端工程化的詳細教程

    webpack+vue.js構建前端工程化的詳細教程

    這篇文章主要介紹了webpack+vue.js構建前端工程化的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • element表單校驗提示定位到元素位置

    element表單校驗提示定位到元素位置

    本文主要介紹了element表單校驗提示定位到元素位置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • vue中post請求以a=a&b=b 的格式寫遇到的問題

    vue中post請求以a=a&b=b 的格式寫遇到的問題

    這篇文章主要介紹了vue中post請求以a=a&b=b 的格式寫遇到的問題,需要的朋友可以參考下
    2018-04-04
  • vue動態(tài)加載路由的3種方式總結

    vue動態(tài)加載路由的3種方式總結

    這篇文章主要介紹了vue動態(tài)加載路由的3種方式總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • ant design vue datepicker日期選擇器中文化操作

    ant design vue datepicker日期選擇器中文化操作

    這篇文章主要介紹了ant design vue datepicker日期選擇器中文化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue3中單文件組件<script?setup>實例詳解

    vue3中單文件組件<script?setup>實例詳解

    <script?setup>是vue3中新引入的語法糖,目的是簡化使用Composition?API時冗長的模板代碼,下面這篇文章主要給大家介紹了關于vue3中單文件組件<script?setup>的相關資料,需要的朋友可以參考下
    2022-07-07
  • 探秘vue-rx 2.0(推薦)

    探秘vue-rx 2.0(推薦)

    這篇文章主要介紹了探秘vue-rx 2.0(推薦),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論

东平县| 洛阳市| 临澧县| 札达县| 九江市| 廉江市| 萨嘎县| 普洱| 平安县| 游戏| 萨嘎县| 元阳县| 专栏| 石渠县| 来宾市| 滨海县| 司法| 南雄市| 木兰县| 惠州市| 东港市| 监利县| 白水县| 崇明县| 遂溪县| 台东市| 长葛市| 永福县| 夹江县| 庄浪县| 赫章县| 曲靖市| 自贡市| 大埔县| 高青县| 明光市| 金坛市| 新宾| 克拉玛依市| 宜宾县| 儋州市|