`
start_p
  • 浏览: 66117 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

使用jquery插件waterfall实现自动加载下一页

阅读更多

本文内容主要摘自:<http://wlog.cn/waterfall/index-zh.html>

开发时请参照原文,本文是在做的过程中遇到的一些问题进行补充说明:

Waterfall

下载

下载waterfall插件最新版本。

使用

html:

<div id="container"></div>

这段代码是作为加载内容的容器。

引入jquery,handlebars和waterfall(注:waterfall默认返回json格式数据并使用handlebars模板渲染json数据,你也可以在options中配置使用其它javascript模板如mustache解析json数据或者直接返回html):

原文中加载部分使用的是handlebars插件,不过我不想再多引入插件还是直接使用json或者html

<script src="/path/jquery.min.js"></script>
<!-- <script src="/path/handlebars.js"></script>不引入 -->
<script src="/path/waterfall.min.js"></script>

template:这段也不需要了

<script id="waterfall-tpl" type="text/x-handlebars-template">
    //template content
</script>

我使用的是nodejs的ejs模板,是直接从原有的页面上抠出来一块用来动态加载,使用json的话还要写这么一堆字符串,所以干脆使用html格式的加载,其他语言的大同小异,morenews.html数据:

<%newsList.forEach(function(item,index){%>
<div class="news-list-group-item">
    <img src="<%=download_website+item.picture_mini%>" alt="">
    <div>
        <a href="/portal/news/<%=item.news_id%>" ><strong><%=item.title_zh%></strong></a>
        <p><%=item.summary_zh%></p>
        <p class="news-item-basic"><span class="news-date"><%=item.release_date || item.create_date%></span><span class="news-look">阅读量:<span><%=item.read_count%></span></span></p>
    </div>
</div>
<%})%>

script:

$('#container').waterfall({
	itemCls: 'news-list-group-item', //加载部分的class
	prefix: '',//可以不写
	fitWidth: true, 
	colWidth: 240, 
	gutterWidth: 10,
	gutterHeight: 10,
	align: 'center',//加载部分的对齐样式,可能需要配置
	minCol: 1, 
	maxCol: undefined, 
	maxPage: undefined, 
	bufferPixel: -50, 
	containerStyle: {
		position: 'relative'
	},
	resizable: true, 
	isFadeIn: false,
	isAnimated: false,
	animationOptions: { 
	},
	isAutoPrefill: true,
	checkImagesLoaded: true,
	path: undefined,//加载部分请求地址
	dataType: 'json', //我使用的是html
	params: {}, 
	
	loadingMsg: '<div style="text-align:center;padding:10px 0; color:#999;"><img src="data:image/gif;base64,R0lGODlhEAALAPQAAP///zMzM+Li4tra2u7u7jk5OTMzM1hYWJubm4CAgMjIyE9PT29vb6KiooODg8vLy1JSUjc3N3Jycuvr6+Dg4Pb29mBgYOPj4/X19cXFxbOzs9XV1fHx8TMzMzMzMzMzMyH5BAkLAAAAIf4aQ3JlYXRlZCB3aXRoIGFqYXhsb2FkLmluZm8AIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7" alt=""><br />Loading...</div>',
	
	state: { 
		isDuringAjax: false, 
		isProcessingData: false, 
		isResizing: false,
		curPage: 1 
	},

	// callbacks
	callbacks: {
		/*
		 * loadingStart
		 * @param {Object} loading $('#waterfall-loading')
		 */
		loadingStart: function($loading) {
			$loading.show();
			//console.log('loading', 'start');
		},
		
		/*
		 * loadingFinished
		 * @param {Object} loading $('#waterfall-loading')
		 * @param {Boolean} isBeyondMaxPage
		 */
		loadingFinished: function($loading, isBeyondMaxPage) {
			if ( !isBeyondMaxPage ) {
				$loading.fadeOut();
				//console.log('loading finished');
			} else {
				//console.log('loading isBeyondMaxPage');
				$loading.remove();
			}
		},
		
		/*
		 * loadingError
		 * @param {String} xhr , "end" "error"
		 */
		loadingError: function($message, xhr) {
			$message.html('Data load faild, please try again later.');
		},
		
		/*
		 * renderData
		 * @param {String} data
		 * @param {String} dataType , "json", "jsonp", "html"
		 */
		renderData: function (data, dataType) {
			var tpl,
				template;
				
			if ( dataType === 'json' ||  dataType === 'jsonp'  ) { // json or jsonp format
				tpl = $('#waterfall-tpl').html();
				template = Handlebars.compile(tpl);
				
				return template(data);
			} else { // html format
				return data;
			}
		}
	},
	
	debug: false
});

options

Name Type Default value Description
itemCls String 'waterfall-item' 瀑布流数据块class
prefix String 'waterfall' 瀑布流元素前辍
fitWidth Boolean true 是否自适应父元素宽度
colWidth Integer 240 瀑布流每列的宽度
gutterWidth Integer 10 数据块水平间距
gutterHeight Integer 10 数据块垂直间距
align String 'center' 数据块相对于容器对齐方式,'align', 'left', 'right'
minCol Integer 1 数据块最小列数
maxCol Integer undefined 数据块最多显示列数,默认undefined,最大列数无限制
maxPage Integer undefined 最多显示多少页数据,默认undefined,无限下拉
bufferPixel Integer -50 滚动时, 窗口底部到瀑布流最小高度列的距离 > bufferPixel时, 自动加载新数据
containerStyle Object {position: 'relative'} 瀑布流默认样式
resizable Boolean true 缩放时是否触发数据重排
isFadeIn Boolean false 新插入数据是否使用fade动画
isAnimated Boolean false resize时数据是否显示动画
animationOptions Object {} resize动画效果,isAnimated为true时有效
isAutoPrefill Boolean true 当文档小于窗口可见区域,自动加载数据
checkImagesLoaded Boolean true 是否图片加载完成后开始排列数据块。如果直接后台输出图片尺寸,可设置为false,强烈建议从后台输出图片尺寸,设置为false
path Array, Function undefined 瀑布流数据分页url,可以是数组如["/popular/page/", "/"] => "/popular/page/1/",或者是根据分页返回一个url方法如:function(page) { return '/populr/page/' + page; } => "/popular/page/1/"
dataType String 'json' 瀑布流返回数据格式,'json', 'jsonp', 'html'
params Object {} 瀑布流数据请求参数,{type: "popular", tags: "travel", format: "json"} => "type=popular&tags=travel&format=json"
loadingMsg Html 见下面代码 加载提示进度条,html
callbacks Object 见下面代码 callback
debug Boolean false 开启debug

loadingMsg:

'&lt;div style="text-align:center;padding:10px 0; color:#999;">&lt;img src="data:image/gif;base64,R0lGODlhEAALAPQAAP///zMzM+Li4tra2u7u7jk5OTMzM1hYWJubm4CAgMjIyE9PT29vb6KiooODg8vLy1JSUjc3N3Jycuvr6+Dg4Pb29mBgYOPj4/X19cXFxbOzs9XV1fHx8TMzMzMzMzMzMyH5BAkLAAAAIf4aQ3JlYXRlZCB3aXRoIGFqYXhsb2FkLmluZm8AIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7" alt="">&lt;br />Loading...&lt;/div>'

callbacks:

callbacks: {
    /*
     * ajax请求开始之前
     * @param {Object} loading $('#waterfall-loading')
     */
    loadingStart: function($loading) {
        $loading.show();
    },

    /*
     * ajax请求加载完成
     * @param {Object} loading $('#waterfall-loading')
     * @param {Boolean} isBeyondMaxPage
     */
    loadingFinished: function($loading, isBeyondMaxPage) {
        if ( !isBeyondMaxPage ) {
            $loading.fadeOut();
        } else {
            $loading.remove();
        }
    },

    /*
     * ajax请求出错误
     * @param {String} xhr , "end" "error"
     */
    loadingError: function($message, xhr) {
        $message.html('Data load faild, please try again later.');
    },

    /*
     * 处理ajax返回数方法
     * @param {String} data
     * @param {String} dataType , "json", "jsonp", "html"
     */
    renderData: function (data, dataType) {
        var tpl,
            template;

        if ( dataType === 'json' ||  dataType === 'jsonp'  ) { // json或jsonp格式
            tpl = $('#waterfall-tpl').html();
            template = Handlebars.compile(tpl);

            return template(data);
        } else { // html格式
            return data;
        }
    }
}

method

$('#container').waterfall( 'methodName', [optionalParameters] );

prepend

$('#container').waterfall('prepend', $content, callback);

append

$('#container').waterfall('append', $content, callback);

removeItems

$('#container').waterfall('removeItems', $items, callback);

reLayout

$('#container').waterfall('reLayout', $content, callback);

pause

$('#container').waterfall('pause', callback);

resume

$('#container').waterfall('pause', callback);

option

$('#container').waterfall('option', options, callback);
以上几个方法根据需求使用,比如没有数据的时候,可以查看下面的“没有数据处理”的源码,还有种情况是页面初始化就没有数据,这样会一直有加载的效果,可以加上这样一段代码:
 
var c = $("#container").html().replace(/\ +/g,"").replace(/[\r\n]/g,"");
if(c==""){
    $("#container").append('<p style="color:#FFF; text-align: center">没有数据,请查看其他内容!<a href="javascript:window.history.back()">返回</a></p><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>');
}else {
    $('#container').waterfall({
        itemCls: 'news-list-group-item',

Demos

分享到:
评论

相关推荐

    jquery.waterfall.plugin-master.zip,jquery瀑布流插件

    jQuery Waterfall Plugin是基于JavaScript库jQuery实现的一种瀑布流插件,它能帮助开发者轻松地创建具有这种布局效果的网页。 在jQuery Waterfall Plugin中,主要涉及以下核心知识点: 1. **jQuery库**:jQuery是...

    JQ 使用waterfall插件实现瀑布流

    瀑布流布局是一种常见的...总结起来,使用jQuery的waterfall插件实现瀑布流布局主要包括引入插件、初始化元素、处理滚动加载等步骤。通过灵活配置和扩展,可以创建出适应不同场景的瀑布流布局,提供优秀的用户体验。

    zhengjing_-jquery-waterfall-master.zip

    例如,PHP可以通过Ajax请求获取服务器上的图片或内容,然后使用jQuery-waterfall插件进行动态加载和布局。 在整合过程中,你需要确保HTML结构符合插件的要求,通常会包含一个容器元素(如`&lt;div class="waterfall"&gt;`...

    waterfall无限动态加载图片支持手机移动端的瀑布流插件

    "waterfall无限动态加载图片支持手机移动端的瀑布流插件"是专为适应手机等移动设备设计的,它主要具备以下特点和功能: 1. **无限滚动**:用户无需翻页,只需滚动屏幕,图片就会自动加载,提供无缝的浏览体验。这种...

    Jquery瀑布流插件

    **jQuery瀑布流插件**是一种基于JavaScript库jQuery的布局插件,主要用于实现网页上元素的瀑布流式布局。这种布局模式通常应用于图片展示、商品目录等场景,它能够让页面中的元素自适应地按照一定规则排列,形成类似...

    jQuery实现图片动态加载效果

    本文将详细讲解如何使用jQuery来实现这一功能,尤其关注鼠标滚动时的图片加载效果。 首先,jQuery是一款广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画制作等任务。在实现图片动态加载时,我们主要利用...

    react-Reactwaterfall高性能无限滚动下拉加载

    在React开发中,实现一个高性能的无限滚动下拉加载功能是一项关键的技术挑战,尤其是在处理大量数据或图片时。"Reactwaterfall"是一个专为此场景设计的组件,它提供了瀑布流布局,并结合了无限滚动(也称为懒加载)...

    waterfall-jQuery实现的瀑布流效果.zip

    waterfall-jQuery实现的瀑布流效果,当前流行的一种布局风格,向下滚动即时加载内容,下拉滚动条或鼠标滚轮滚动到页面底部时, 动态即时加载新内容。主要是当滚动到居底部以上100像素时,就开始加载新内容了。

    jQuery实现瀑布流滚动加载分页效果

    本篇文章将详细介绍如何使用jQuery实现瀑布流滚动加载分页效果。 首先,我们要理解瀑布流的基本原理。瀑布流布局的关键在于计算每个元素的宽度和位置,使其能够在页面上形成连续的多列。通常我们会选择一个固定的...

    瀑布流无限加载图片插件jq-waterfall

    "jq-waterfall"是一款基于jQuery的瀑布流插件,其核心目标是实现类似Pinterest的图片无限滚动加载效果。该插件响应式设计,能够根据用户设备的屏幕尺寸和方向自动调整布局,确保在各种设备上都能呈现出良好的显示...

    一个Jquery瀑布插件

    3. **JavaScript初始化**:在页面加载完成后,使用jQuery选择器获取所有子元素,然后调用插件方法进行初始化。 ```javascript $(document).ready(function() { $('#waterfall').waterfall({ // 配置选项 }); });...

    jquery瀑布流插件

    总的来说,jQuery瀑布流插件是实现网页动态、自适应布局的有效工具,其核心在于巧妙地处理元素的尺寸、定位和加载,以实现美观且流畅的视觉效果。对于前端开发者来说,掌握这样的插件不仅能提升工作效率,也能为用户...

    jquery瀑布流布局插件类似于Pinterest

    1. **源代码文件**:JavaScript文件(如`jquery.waterfall.js`)实现了瀑布流布局的逻辑。 2. **示例或演示**:可能有一个`demo.html`文件,展示了插件的使用方法和效果。 3. **CSS样式表**:`style.css`可能包含了...

    瀑布流功能

    在"瀑布流功能"中,核心的实现通常依赖于JavaScript库,比如jQuery的插件"jquery.waterfall"。这个插件是专门为实现瀑布流布局而设计的,它简化了开发者的工作,让网页动态加载和排列内容变得更加容易。以下是对瀑布...

    jQuery瀑布流 图片无限加载代码

    一款简单的jquery瀑布流特效,完美实现了图片的ajax无限加载效果,相关参数设置说明:  column_width:240,//列宽  column_className:'waterfall_column',//列的类名  column_space:10,//列间距  cell_...

    jquery实现瀑布流

    3. **jQuery插件**:虽然可以通过纯JavaScript实现瀑布流,但使用jQuery插件可以简化流程。有许多现成的jQuery瀑布流插件,如jQuery Masonry、Isotope等。如果你的压缩包中的"waterfall"文件是其中一个插件,那么你...

    asp.net+JQuery瀑布流(可从后台获得页码动态加载)

    瀑布流布局的实现通常借助于第三方插件,如Isotope或Masonry,它们提供了灵活的网格布局和自动调整大小的功能。在HTML结构中,我们需要创建一个容器元素,用于容纳从后台获取的数据。每个瀑布流项应该包含在独立的...

    瀑布流waterfall

    2. **动态加载**:当用户滚动页面接近底部时,插件可以自动加载更多内容,实现无限滚动的效果,提高用户体验。 3. **适配不同屏幕尺寸**:随着响应式设计的需求增加,好的瀑布流插件应能适应各种屏幕尺寸,如手机、...

    vuewaterfall瀑布流插件自适应PC移动端无需预设置高度

    VueWaterfall插件的源代码位于压缩包中的`vue-waterfall-plugin-master`文件夹,包含了组件的实现、示例以及相关的文档说明。开发者可以通过查看源码了解其工作原理,或者根据自己的需求进行定制和扩展。 总之,...

    jQuery底部填充瀑布流.zip_JQuery bottom_waterfall

    JQuery bottom filling waterfall flow is an automatic bottom filling alignment waterfall flow layout code.

Global site tag (gtag.js) - Google Analytics