zoukankan      html  css  js  c++  java
  • vue分页 点击(非下拉)

    1.主页面

    <template>
        <div class="list">
            <template v-if="count">
            555555
                <ul>
                    <li v-for="item in items">{{item}}</li>
                </ul>
                <mo-paging 
                :page-index="currentPage" 
                :total="count" 
                :page-size="pageSize" 
                @change="pageChange">
                </mo-paging>
            </template>
        </div>
    </template>
    <script>
        import MoPaging from './pages'
        export default {
            //显示的声明组件
            components : {
                MoPaging 
            },
            data () {
                return {
                    pageSize : 3 , //每页显示20条数据
                    currentPage : 1, //当前页码
                    count : 0, //总记录数
                    items : []
                }
            },
            methods : {
                //获取数据
                getList () {
                var _this=this
                    //模拟
                    let url = `http://127.0.0.1/ceshi/list.php?pageSize=${this.pageSize}&currentPage=${this.currentPage}`
                    $.ajax({
                        type: "post",
                        url:url,
                        data:{aa:1},
                        datatype:'json',
                        error: function(request) {
                             alert("Connection err是是是or");
                        },
                        success: function(body) {
                        body=JSON.parse(body);
                        console.log(body.count)
                          _this.count = body.count
                          console.log(body)
                          _this.items = body.list
                        }
                    });
                   
                },
    
                //从page组件传递过来的当前page
                pageChange (page) {
                    this.currentPage = page
                    this.getList()
                }
            },
            mounted() {
                //请求第一页数据
                this.getList()
            } 
        }
    </script>
    

      2,插件文件(包含的pages.js文件)

    <script>
    export default {
        name : 'MoPaging',
        //通过props来接受从父组件传递过来的值
        props : {
    
            //页面中的可见页码,其他的以...替代, 必须是奇数
            perPages : { 
                type : Number,
                default : 5 
            },
    
            //当前页码
            pageIndex : {
                type : Number,
                default : 1
            },
    
            //每页显示条数
            pageSize : {
                type : Number,
                default : 10
            },
    
            //总记录数
            total : {
                type : Number,
                default : 1
            },
    
        },
        methods : {
            prev(){
                if (this.index > 1) {
                    this.go(this.index - 1)
                }
            },
            next(){
                if (this.index < this.pages) {
                    this.go(this.index + 1)
                }
            },
            first(){
                if (this.index !== 1) {
                    this.go(1)
                }
            },
            last(){
                if (this.index != this.pages) {
                    this.go(this.pages)
                }
            },
            go (page) {
                if (this.index !== page) {
                    this.index = page
                    //父组件通过change方法来接受当前的页码
                    this.$emit('change', this.index)
                }
            }
        },
        computed : {
    
            //计算总页码
            pages(){
                return Math.ceil(this.size / this.limit)
            },
    
            //计算页码,当count等变化时自动计算
            pagers () {
                const array = []
                const perPages = this.perPages
                const pageCount = this.pages
                let current = this.index
                const _offset = (perPages - 1) / 2
    
                
                const offset = {
                    start : current - _offset,
                    end   : current + _offset
                }
    
                //-1, 3
                if (offset.start < 1) {
                    offset.end = offset.end + (1 - offset.start)
                    offset.start = 1
                }
                if (offset.end > pageCount) {
                    offset.start = offset.start - (offset.end - pageCount)
                    offset.end = pageCount
                }
                if (offset.start < 1) offset.start = 1
    
                this.showPrevMore = (offset.start > 1)
                this.showNextMore = (offset.end < pageCount)
    
                for (let i = offset.start; i <= offset.end; i++) {
                    array.push(i)
                }
    
                return array
            }
        },
        data () {
            return {
                index : this.pageIndex, //当前页码
                limit : this.pageSize, //每页显示条数
                size : this.total || 1, //总记录数
                showPrevMore : false,
                showNextMore : false
            }
        },
        watch : {
            pageIndex(val) {
                this.index = val || 1
            },
            pageSize(val) {
                this.limit = val || 10
            },
            total(val) {
                this.size = val || 1
            }
        }
    }
    </script>
    <template>
        <ul class="mo-paging">
            <!-- prev -->
            <li
            :class="['paging-item', 'paging-item--prev', {'paging-item--disabled' : index === 1}]"
            @click="prev">prev</li>
            
            <!-- first -->
            <li
            :class="['paging-item', 'paging-item--first', {'paging-item--disabled' : index === 1}]"
            @click="first">first</li>
            
            <li
            :class="['paging-item', 'paging-item--more']"
            v-if="showPrevMore">...</li>
    
            <li
            :class="['paging-item', {'paging-item--current' : index === pager}]"
            v-for="pager in pagers"
            @click="go(pager)">{{ pager }}</li>
    
            <li
            :class="['paging-item', 'paging-item--more']"
            v-if="showNextMore">...</li>
            
            <!-- last -->
            <li
            :class="['paging-item', 'paging-item--last', {'paging-item--disabled' : index === pages}]"
            @click="last">last</li>
    
            <!-- next -->
            <li
            :class="['paging-item', 'paging-item--next', {'paging-item--disabled' : index === pages}]"
            @click="next">next</li>
        </ul>
    </template>
    
    <style>
    .mo-paging {
        display: inline-block;
        padding: 0;
        margin: 1rem 0;
        font-size: 0;
        list-style: none;
        user-select: none;
        > .paging-item {
            display: inline;
            font-size: 14px;
            position: relative;
            padding: 6px 12px;
            line-height: 1.42857143;
            text-decoration: none;
            border: 1px solid #ccc;
            background-color: #fff;
            margin-left: -1px;
            cursor: pointer;
            color: #0275d8;
            &:first-child {
                margin-left: 0;
            }
            &:hover {
                background-color: #f0f0f0;
                color: #0275d8;
            }
            &.paging-item--disabled,
            &.paging-item--more{
                background-color: #fff;
                color: #505050;
            }
            //禁用
            &.paging-item--disabled {
                cursor: not-allowed;
                opacity: .75;
            }
            &.paging-item--more,
            &.paging-item--current {
                cursor: default;
            }
            //选中
            &.paging-item--current {
                background-color: #0275d8;
                color:#fff;
                position: relative;
                z-index: 1;
                border-color: #0275d8;
            }
        }
    }
    </style>
    

      

  • 相关阅读:
    【codecombat】 试玩全攻略 第二章 边远地区的森林 一步错
    【codecombat】 试玩全攻略 第十八关 最后的kithman族
    【codecombat】 试玩全攻略 第二章 边远地区的森林 woodlang cubbies
    【codecombat】 试玩全攻略 第二章 边远地区的森林 羊肠小道
    【codecombat】 试玩全攻略 第十七关 混乱的梦境
    【codecombat】 试玩全攻略 第二章 边远地区的森林 林中的死亡回避
    【codecombat】 试玩全攻略 特别关:kithguard斗殴
    【codecombat】 试玩全攻略 第二章 边远地区的森林 森林保卫战
    【codecombat】 试玩全攻略 第二章 边远地区的森林
    实验3 类和对象||
  • 原文地址:https://www.cnblogs.com/weiyiyong/p/8779945.html
Copyright © 2011-2022 走看看