前端html列表加载更多效果(默认取出所有数据,用js控制显示数量,也可以用分页的形式进行ajax请求,这种暂时木有写)

代码说明,页面是用freemarker写的,newsModel.list  是所有的数据;

 <ul class="affair_list" pagesize="3">  这句是关键

<#if type=='news'>

                <ul class=" affair_list" pagesize="3">
                    <#if newsModel?? && newsModel.list??> <#list
                    newsModel.list as list>
                    <li><a href="javascript:void(0);"
                        onclick="newsD(${list.id})">
                            <div class="datetime">
                                <p class="day">
                                    <span class="">${list.publishDate?string('dd')!''}</span>
                                </p>
                                <p class="month">
                                ${list.publishDate?string('MM')!''}</p>
                            </div>
                            <div class="item_content">
                                <h5 class="otw">${list.title!''}</h5>
                                <p>${list.content!''}</p>
                                <em>&rarr;</em>
                            </div>
                    </a></li>
                     </#list> </#if>
                </ul>
                </#if>
                <p class=" load_more">

                </p>


//下面是js代码

<script type="text/javascript">
    $(function() {
        var affair_list = function ($children, n) {
            //显示某jquery元素下的前n个隐藏的子元素
            var $hiddenChildren = $children.filter(":hidden");
            var cnt = $hiddenChildren.length;
            for ( var i = 0; i < n && i < cnt ; i++) {
                $hiddenChildren.eq(i).slideDown();
            }
            return cnt-n;//返回还剩余的隐藏子元素的数量
        }
        var selector
        if (selector == undefined) { selector = ".affair_list" }
        $(selector).each(function () {
            var pagesize = $(this).attr("pagesize") || 10;
            console.log(pagesize);
            $(this).find("li:lt("+pagesize+")").show();
            var $children = $(this).children();
            if ($children.length > pagesize) {
                for (var i = pagesize; i < $children.length; i++) {
                    $children.eq(i).hide();
                }
                $("<p class='load_more'>加载更多</p>").insertAfter($(this)).click(function () {
                    if (affair_list($children, pagesize) <= 0) {
                        //如果目标元素已经没有隐藏的子元素了,就隐藏“点击更多的按钮条”
                        $(this).hide();
                    };
                });
            }
        });
    });

    </script>

//个人觉得这样的做法会在后期数据量很大时,效率太慢,可以考虑第二种,分页的逻辑,用ajax进行请求

猜你喜欢

转载自blog.csdn.net/wudiansheng/article/details/80078713