`
流浪的我
  • 浏览: 34128 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

点击加载更多内容

 
阅读更多

基本原理:页面载入时,向后台请求数据,PHP通过查询数据库将最新的几条记录显示在列表页,在列表页的底部有个“更多”链接,通过触发该链接,向服务端发送Ajax请求,后台PHP程序得到请求参数,并作出相应,获取数据库相应的记录并以JSON的形式返回给前台页面,前台页面jQuery解析JSON数据,并将数据追加到列表页。其实就是Ajax分页效果。

 

1.引入jquery库和jquery.more.js插件,jquery.more.js已经将许多功能都封装好了,并提供了参数配置的功能。

 

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="jquery.more.js"></script>

 2 html结构

 

 

	<ul id="more" style="display: block;">						
             <li class="show-box">
		 <div class="box">
		      <div class="left">
	                   <a href="url"><img src="thumbUrl"></a>					      </div>
		      <div class="right">
		           <a href="#" class="title"></a>
				<p class="digest"></p>
			        <span class="time">
				<i></i>
				<span class="updateTime"></span>
			        </span>
		      </div>
		</div>
	    </li>
	    <li class="loadMore"><a href="javascript:;">加载更多>></a></li>
        </ul>

页面里面的 title digest  updatatime对应数据里面的属性名,loadMore是和jquery.more.js插件关联的,你也可以取另外的class名字,但是在配置的时候一定要将对应的class写上。

 

js

$(function(){
	$('#more').more({'address': 'http://192.168.3.233:8000/agriculture/ajax/info'})
});

 php

require_once('connect.php'); 
 
$last = $_POST['last']; 
$amount = $_POST['amount']; 
 
$user = array('demo1','demo2','demo3','demo3','demo4'); 
$query=mysql_query("select * from say order by id desc limit $last,$amount"); 
while ($row=mysql_fetch_array($query)) { 
    $sayList[] = array( 
        'content'=>$row['content'], 
        'author'=>$user[$row['userid']], 
        'date'=>date('m-d H:i',$row['addtime']) 
      ); 
} 
echo json_encode($sayList); 

接收前台页面提交过来的两个参数,$_POST['last']即开始记录数,$_POST['amount']即单次显示记录数,看SQL语句就明白,其实就是分页中用到的语句。

然后将查询的结果以JSON格式输出,PHP的任务就完成了。

最后来看下jquery.more.js的参数配置。

'amount'      :   '10',           //每次显示记录数 
'address'     :   'comments.php', //请求后台的地址 
'format'      :   'json',         //数据传输格式 
'template'    :   '.show-box', //html记录DIV的class属性 
'trigger'     :   '.loadMore',    //触发加载更多记录的class属性 
'scroll'      :   'false',        //是否支持滚动触发加载 
'offset'      :   '100',          //滚动触发加载时的偏移量 

 

 jquery.more.js文件

(function( $ ){          
    var target = null;
    var template = null;
    var lock = false;
    var variables = {
        'last'      :    0        
    } 
    var settings = {
        'amount'      :   '10',          
        'address'     :   'comments.php',
        'format'      :   'json',
        'template'    :   '.show-box',
        'trigger'     :   '.loadMore',
        'scroll'      :   'false',
        'offset'      :   '100',
        'spinner_code':   ''
    }
    
    var methods = {
        init  :   function(options){
            return this.each(function(){
              
                if(options){
                    $.extend(settings, options);
                }
                template = $(this).children(settings.template).wrap('<div/>').parent();
                template.css('display','none')
                $(this).append('<div class="more_loader_spinner">'+settings.spinner_code+'</div>')
                $(this).children(settings.template).remove()   
                target = $(this);
                if(settings.scroll == 'false'){                    
                    $(this).find(settings.trigger).bind('click.more',methods.get_data);
                    $(this).more('get_data');
                }                
                else{
                    if($(this).height() <= $(this).attr('scrollHeight')){
                        target.more('get_data',settings.amount*2);
                    }
                    $(this).bind('scroll.more',methods.check_scroll);
                }
            })
        },
        check_scroll : function(){
            if((target.scrollTop()+target.height()+parseInt(settings.offset)) >= target.attr('scrollHeight') && lock == false){
                target.more('get_data');
            }
        },
        debug :   function(){
            var debug_string = '';
            $.each(variables, function(k,v){
                debug_string += k+' : '+v+'\n';
            })
            alert(debug_string);
        },     
        remove        : function(){            
            target.children(settings.trigger).unbind('.more');
            target.unbind('.more')
            target.children(settings.trigger).remove();
        },
        add_elements  : function(data){
            //alert('adding elements')
            
            var root = target       
         //   alert(root.attr('id'))
            var counter = 0;
            if(data){
                $(data).each(function(){
                    counter++
                    var t = template                    
                    $.each(this, function(key, value){                          
                        if(key == 'url'){
                            //console.log(t.find('.'+key))
                            t.find('.'+key).attr("href",value)
                        }else if (key == 'thumbUrl'){
                            var newvalue = '/'+value;
                            t.find('.'+key).attr("src",newvalue)
                        } else {
                            //console.log(key)
                            t.find('.'+key).html(value)
                        }
                    })         
                    //t.attr('id', 'more_element_'+ (variables.last++))
                    if(settings.scroll == 'true'){
                    //    root.append(t.html())
                    root.children('.more_loader_spinner').before(t.html())  
                    }else{
                    //    alert('...')
                          
                          root.children(settings.trigger).before(t.html())  

                    }

                    root.children(settings.template+':last').attr('id', 'more_element_'+ ((variables.last++)+1))  
                 
                })
                
                
            }            
            else  methods.remove()
            target.children('.more_loader_spinner').css('display','none');
            if(counter < settings.amount) methods.remove()            

        },
        get_data      : function(){   
           // alert('getting data')
            var ile;
            lock = true;
            target.children(".more_loader_spinner").css('display','block');
            $(settings.trigger).css('display','none');
            if(typeof(arguments[0]) == 'number') ile=arguments[0];
            else {
                ile = settings.amount;              
            }
            
            $.post(settings.address, {
                last : variables.last, 
                amount : ile                
            }, function(data){            
                $(settings.trigger).css('display','block')
                methods.add_elements(data)
                lock = false;
            }, settings.format)
            
        }
    };
    $.fn.more = function(method){
        if(methods[method]) 
            return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
        else if(typeof method == 'object' || !method) 
            return methods.init.apply(this, arguments);
        else $.error('Method ' + method +' does not exist!');

    }    
})(jQuery)

 

分享到:
评论

相关推荐

    PHP+Ajax点击加载更多内容

    在现代网页开发中,"PHP+Ajax点击加载更多内容"是一种常见的优化用户体验的技术,尤其适用于手机端和web端的数据分页加载。这个技术的核心在于利用Ajax(异步JavaScript和XML)来实现页面内容的动态加载,而无需刷新...

    jquery点击加载更多内容插件.rar

    "jQuery点击加载更多内容插件"是一个用于网页中实现分页加载内容的JavaScript插件,主要应用于长列表或数据流式布局,以提高用户体验并优化页面加载性能。它通过监听用户的点击事件,按需加载页面下方的内容,而不是...

    简单的jquery点击加载更多内容插件

    这款简单的jQuery点击加载更多内容插件的核心在于监听用户点击事件,当用户触发特定按钮时,通过Ajax请求从服务器获取更多的数据。Ajax技术允许在不刷新整个页面的情况下与服务器进行异步通信,提升了用户体验。插件...

    php ajax mysql 点击加载更多 分页

    在“点击加载更多”功能中,AJAX通过JavaScript异步发送请求,获取服务器上更多的数据。 3. MySQL:这是一个关系型数据库管理系统,用于存储和管理网站数据。在分页加载中,MySQL执行SQL查询来获取指定范围的数据,...

    PHP+Ajax点击加载更多内容 -效果好,速度快,带图片加载和跳转链接 加载最后一页更多变成文字变没记录

    在网页开发中,"点击加载更多"是一种常见的用户体验优化技术,尤其在处理大量数据或内容时,如新闻、博客文章或商品列表。这种技术允许用户滚动页面时动态加载额外的内容,而无需等待整个页面重新加载,提高了加载...

    vue 点击加载更多vue 点击加载更多

    "点击加载更多"是网页中常见的功能,尤其在显示大量数据如小说列表、文章列表或评论区时,为了优化用户体验,通常不会一次性加载所有内容,而是分页或者按需加载。本篇文章将深入探讨如何在Vue.js项目中实现“点击...

    php+ajax+jquery实现点击加载更多内容

    在Web开发中,实现点击加载更多内容是一个常见需求,它可以让用户在不刷新页面的情况下获取更多的数据。本文将详细介绍如何使用PHP、AJAX以及jQuery以及jquery.more.js插件来实现这一功能。 首先,了解基本原理是...

    ListView下拉刷新点击加载更多

    "ListView下拉刷新点击加载更多"这个主题涉及到的是ListView的两个重要功能:下拉刷新(Pull-to-Refresh)和点击加载更多(Infinite Scrolling)。这两个特性极大地提升了用户体验,让用户能够实时获取最新数据并...

    js点击加载更多

    - **无限滚动**:除了点击加载更多,还可以实现无限滚动效果,即当用户滚动到页面底部时自动加载新内容。 - **分页优化**:通过预加载或懒加载技术,可以在用户接近但尚未看到新内容时提前加载,提高用户体验。 -...

    load_More(点击加载更多)

    6. **无限滚动(Infinite Scroll)**:与点击加载更多类似,无限滚动是在用户滚动页面时自动加载更多内容,无需用户点击按钮。这种设计更适合于连续浏览的场景,但需注意控制好加载时机,避免频繁请求。 7. **分页...

    jquery 点击加载更多 (可在一个页面实现多个)

    "jQuery 点击加载更多"是一个常见的功能,用于分页或无限滚动,提升用户体验,避免一次性加载过多内容导致页面加载缓慢。本教程将详细讲解如何在同一个页面上实现多个独立的“点击加载更多”功能。 首先,理解基本...

    点击加载更多图片与内容

    一个基于jquery库的点击加载更多实现(可在一个页面实现多个)。 真实的案例。 当初进行项目的时候没有找到合适的代码(找到的很多都是滚动条拖到底自动出现,没有点击出现的),并且要实现一个页面多个点击加载,...

    AJAX点击加载更多

    在"点击加载更多"的场景中,AJAX扮演着关键角色,它使得用户可以滚动页面到底部时,通过点击按钮来加载更多的内容,而不需要手动刷新整个页面。这种方式提升了用户体验,减少了网络流量,使得数据加载更为高效。 1....

    jQuery点击加载更多按钮加载图片效果

    "jQuery点击加载更多按钮加载图片效果"是一个常见的网页交互功能,主要用于优化页面性能和提升用户体验。这种技术允许用户按需加载图片,而不是一次性加载所有图片,从而减少页面初次加载时的数据量,加快页面渲染...

    瀑布流布局,点击加载更多效果

    随着页面滚动,可以使用jQuery的`$(window).scroll()`事件监听滚动条变化,当到达页面底部时触发加载更多内容的逻辑。 在描述中提到的“点击加载更多效果”是瀑布流布局中常见的分页加载策略。这种方式可以避免一次...

    android加载更多

    在Android开发中,"加载更多"功能是一种常见的用户体验设计,特别是在显示大量数据的列表视图(ListView)中。这个功能允许用户滚动到列表底部时触发加载更多数据的请求,而不是一次性加载所有数据,从而节省内存资源...

    jquery 上拉加载更多

    这种技术允许用户滚动到页面底部时自动加载更多内容,而无需点击专门的加载按钮。这种方式被称为“无限滚动”或“滚动加载”。 首先,我们要理解jQuery的基础知识。jQuery是一个轻量级的JavaScript库,它简化了HTML...

    实现ajax加载更多功能

    6. **处理响应**:前端接收到服务器的响应后,JavaScript会解析返回的数据,然后将新数据动态插入到页面的适当位置,同时更新或隐藏“查看更多”按钮,以反映是否还有更多内容可加载。 7. **错误处理**:良好的Ajax...

Global site tag (gtag.js) - Google Analytics