`
JavaSam
  • 浏览: 954879 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js 滚动加载实现(根本不需要一大堆js库)

 
阅读更多
Tips:代码中easyui treegrid的操作(项目中用easyui),代码并不能放之四海而皆准,
但是可以通过代码了解滚动加载的原理(只为学习)。

/**
 * @author wsf 前台分页(只对已经加载的数据进行分割)
 */
;
(function (win,$){
	/**
	 * 自定义命名空间
	 */
	$.scrollPage = $.extend({},{
		/**
		 * page对象
		 */
		config:{
			pageData:{},//页面数据
			dataLoding:false,//是否正在加载数据
			canStartLoadData:false,//是否可以开始加载数据
			pageNo:1,//页码
			pageItem:10,//没有的数据条数(每页显示的条数)
			currentPageItem:30,//当前页面显示了多少数据
			time:null,//时间及时器
			speed:10,//判断是否可加载的间隔
		},
		/**
		 * 初始化
		 */
		init:function (_config){
			var _this = $.scrollPage;//
			$.extend(_this.config,_config);
			return _this;//为了链式操作
		},
		/**
		 * 设置pageData
		 */
		setPageData:function (pageData){
			this.config.pageData = pageData;
		},
		/**
		 * 加载下一页
		 */
		getNext:function (){
			var _this = $.scrollPage;
			var cfg = _this.config;
			var sliceStart = cfg.currentPageItem;//数组截取开始下标
			cfg.pageNo ++;//页码加一
			cfg.currentPageItem = cfg.pageNo*cfg.pageItem;	
			var sliceEnd = cfg.currentPageItem;//数组截取开始下标
			return cfg.pageData.slice(sliceStart,sliceEnd);
		},
		/**
		 * 返回前一页
		 */
		getPrev:function (){
			var _this = $.scrollPage;
			var cfg = _this.config;
			var sliceEnd = cfg.currentPageItem;//数组截取开始下标
			cfg.pageNo--;//页码加一
			cfg.currentPageItem = 	cfg.pageNo*cfg.pageItem;	
			var sliceStart = cfg.currentPageItem;//数组截取开始下标
			return cfg.pageData.slice(sliceStart,sliceEnd);
		},
		/**
		 * 监听页面滚动事件
		 */
		listener:function (){
			var _this = $.scrollPage;
			var cfg = _this.config;
			//var _canStart = _this._canStartLoadData();//是否可以开始加载
			var _canStart = _this.isPageBottom();//是否滚动到页面底部
			if(_canStart){
				showMyLoading();
				_this._startLoad(_this._endLoad);//开始加载
			}
			return _this;
		},
		/**
		 * 开始加载数据
		 */
		_startLoad:function (callback){
			var _this = $.scrollPage;
			var cfg = _this.config;
			cfg.dataLoding = true;//正在加载数据
			var _loadData = _this.getNext();//要加载的数据
			for(var i in _loadData){
				_this._addRow(_loadData[i]);//添加行
			}
			if(callback)
				callback();
		},
		/**
		 * 添加行
		 */
		_addRow:function (_pageData){
			var _this = $.scrollPage;
			var cfg = _this.config;
			$('#content').treegrid('append',{
	              parent: 0,  // 这里指定父级标识就可以了
	              data: [_pageData]
	        });
			_this._interlaceRow();//隔行变色
		},
		/**
		 * 加载结束
		 */
		_endLoad:function (){
			var _this = $.scrollPage;
			var cfg = _this.config;
			cfg.dataLoding = false;
			cfg.canStartLoadData = false;
			setTimeout(function (){
				closeLoading();
			},2000);
			return _this;
		},
		/**
		 * 是否可以开始加载数据
		 */
		_canStartLoadData:function (){
			var _this = $.scrollPage;
			var cfg = _this.config;
			var scrollPos = _this._scrollPosition();
			
		},
		/**
		 * 页面滚动到哪个地方了
		 */
		_scrollPosition:function (){
			var _this = $.scrollPage;
			var cfg = _this.config;
			var scrTop = $("body").scrollTop();//页面的滚动高度
			return scrTop;
		},
		/**
		 * 判断页面是否滚动到底部
		 */
		isPageBottom:function () {  
		    var scrollTop = 0;  
		    var clientHeight = 0;  
		    var scrollHeight = 0;  
		    /*
		    if (document.documentElement && document.documentElement.scrollTop) {  
		        scrollTop = document.documentElement.scrollTop;  
		    } else if (document.body) {  
		        scrollTop = document.body.scrollTop;  
		    }  */
		    scrollTop = $(document).scrollTop();
		    /*
		    if (document.body.clientHeight && document.documentElement.clientHeight) {  
		        clientHeight = (document.body.clientHeight < document.documentElement.clientHeight) ? document.body.clientHeight: document.documentElement.clientHeight;  
		    } else {  
		        clientHeight = (document.body.clientHeight > document.documentElement.clientHeight) ? document.body.clientHeight: document.documentElement.clientHeight;  
		    }  */
		    clientHeight = $(document).height();
		    // 知识点:Math.max 比较大小,取最大值返回  
		    scrollHeight = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);  
		    if (scrollTop + clientHeight == scrollHeight) {  
		        return true;  
		    } else {  
		        return false;  
		    }  
		},
		_interlaceRow : function(){
			var allRows = $(".datagrid-row:odd");
			allRows.css("background-color","rgb(224, 232, 255)");//隔行变色
		}
	});
})(window,jQuery);

 

0
0
分享到:
评论

相关推荐

    vue.js单排卡片滚动切换代码.zip

    在“vue.js单排卡片滚动切换代码”这个项目中,我们看到的是一个基于Vue.js实现的UI组件,它设计了一个简洁的图片和文本卡片布局,适用于展示信息。这个组件特别适合于创建展示产品、新闻或任何其他信息的网站。 在...

    js 图片滚动 轮播 多种效果 代码简单 详细

    综上所述,创建"js 图片滚动 轮播 多种效果"需要结合JavaScript和jQuery的特性,理解DOM操作、事件处理、动画实现以及响应式设计等原理。通过实践和学习,你可以创建出既美观又实用的图片滚动轮播效果。

    js堆叠卡片轮播图插件stackedCards

    总结,stackedCards是一款强大的JavaScript插件,借助jQuery的力量,可以轻松实现富有创意的堆叠卡片轮播图效果。无论是滑动模式还是扇形模式,都能为你的网页增添独特的视觉魅力。通过理解和应用这款插件,你可以为...

    js大图无缝滚动效果

    JavaScript(简称JS)是一种轻量级的脚本语言,常用于网页交互和动态效果的实现。在网页设计中,大图无缝滚动效果是常见的展示手段,它可以为网站增添视觉吸引力,提升用户体验。这个"js无缝大图滚动"的资源正是针对...

    JS实现图片浏览特效

    在网页设计中,JavaScript(JS)是一种至关重要的脚本语言,它使得网页具有动态交互性。本主题聚焦于“JS实现图片浏览特效”,这通常涉及到图片预览、滑动展示、缩放、旋转等视觉效果,提升用户体验。下面将详细讨论...

    js实现堆叠卡片轮播图插件stackedCards.zip

    "js实现堆叠卡片轮播图插件stackedCards.zip"就是这样一个工具,它旨在帮助开发者轻松地在网页上实现这种效果。 首先,堆叠卡片轮播图的核心原理是利用CSS3的转换(transform)和动画(animation)属性,以及...

    滚动自动加载瀑布流

    为了实现滚动加载,我们可以设置一个阈值,当滚动距离接近页面底部时触发加载更多图片的逻辑。 在处理返回的数据时,需要根据每张图片的宽度和高度计算其在瀑布流中的位置,以保持布局的整齐。这通常涉及到计算每列...

    jquery Masonry插件方砖布局图片与内容无限滚动加载

    本文将深入探讨jQuery Masonry插件的原理、使用方法以及无限滚动加载的实现。 ### 1. Masonry布局原理 Masonry布局的核心理念是将网页元素(如图片或卡片)以不规则的形状进行堆叠,如同砖墙砌筑一样,使得每个...

    经典的javascript网页特效代码 javascript特效

    JavaScript是一种广泛应用于网页开发的脚本语言,它赋予网页动态性,使得网页不仅仅是一堆静态信息,而是可以与用户交互、展示各种炫酷效果的媒介。在这个“经典的javascript网页特效代码”压缩包中,可能包含了多种...

    js滚动产品图片代码.zip

    这个“js滚动产品图片代码.zip”压缩包包含的资源可能就是一个简单的实现这一功能的示例。下面我们将深入探讨相关知识点。 首先,涉及到的主要技术栈有CSS(Cascading Style Sheets)、HTML5、JavaScript以及jQuery...

    jquery-stacks:jQuery插件,可实现堆叠式滚动效果

    在Web开发中,创建吸引人的用户体验是至关重要的,而jQuery Stacks插件就是一种工具,它可以帮助开发者实现堆叠式滚动效果,从而提升网站或应用的视觉吸引力。该插件基于流行的JavaScript库jQuery构建,能够使网页中...

    jQuery Bootstrap响应式新闻列表文字上下滚动特效

    标题中的“jQuery Bootstrap响应式新闻列表文字上下滚动特效”指的是使用jQuery库和Bootstrap框架来创建一个适应不同设备屏幕尺寸的新闻列表,同时实现文字的上下滚动效果。这种特效常见于网站的新闻或更新部分,...

    jquery.mosonry.js实现瀑布流效果

    总之,jQuery Masonry.js是一个强大的工具,它简化了瀑布流布局的实现,结合无限滚动功能,为用户提供了一种优雅、高效的方式来浏览和加载大量内容。在实际项目中,合理地利用这些文件和资源,可以构建出具有吸引力...

    jquery图片滚动

    在网页设计中,jQuery是一种广泛使用的JavaScript库,它极大地简化了JavaScript代码的编写,特别是对于实现动态和交互性效果。本篇文章将详细讲解如何利用jQuery实现图片滚动效果,这是一个常见的网页特效,能为网站...

    响应式炫酷页面切换js特效代码.zip

    在这个“响应式炫酷页面切换js特效代码”压缩包中,可能包含了一个或多个JavaScript文件,它们是实现这种特效的核心。开发者通常会编写自定义的js代码来处理页面元素的显示和隐藏,以及过渡动画。这些特效可能包括...

    静态书架和js模拟翻书效果

    这是一种使用JavaScript库(如Three.js、Book.js或Flipbook.js)实现的技术,它允许用户在网页上体验类似真实翻书的动态视觉效果。这种效果通常是通过将每一页看作一个3D对象,然后通过旋转和透明度变化来模拟翻页...

    代码库和一堆乱七八糟的代码

    "代码库和一堆乱七八糟的代码"这个描述可能暗示了一个开发过程中常见的现象,即代码库中的代码组织不够有序,可能存在混乱或未整理的状态。这通常会影响代码的可读性、可维护性和团队协作效率。 首先,我们来逐一...

    javascript 经典网页特效

    JavaScript是一种广泛应用于网页开发的脚本语言,它赋予网页动态性,使得网页不仅仅是一堆静态信息,而是可以与用户交互、展示动态效果的存在。在这个"javascript 经典网页特效"的资源中,我们将会探讨一些...

    JavaScript开发响应式时间轴

    在这个“JavaScript开发响应式时间轴”的主题中,我们将深入探讨如何利用JavaScript来创建一个动态、灵活的时间轴布局,以适应各种屏幕尺寸。 时间轴是一种常见的展示事件或历史顺序的方式,它以线性形式呈现信息,...

    支持响应式手机端的JS手风琴折叠导航菜单特效

    "支持响应式手机端的JS手风琴折叠导航菜单特效"是一个专为手机网站设计的导航菜单,利用JavaScript(可能结合jQuery库)和CSS技术,实现了一种优雅的交互效果。 首先,手风琴特效是一种常见的UI设计元素,它允许...

Global site tag (gtag.js) - Google Analytics