jQuery:实现图片按需加载的方法,当要显示内容的高度超过了页面的高度,按需加载,根据滚动条的位置来判断页面显示的内容
实现图片按需加载的方法,当要显示内容的高度超过了页面的高度,按需加载,根据滚动条的位置来判断页面显示的内容
这个类似于京东或淘宝页面,根绝页面的滚动,显示下面的内容
如下图所示,一开始并不是所有的图片都显示,当滚动条移动到页面最下面的时候,再显示下面的内容

解决思路:通过判断滚动条是否滚动到了页面的最下面,如果滚动到了页面的最下面,则重新加载图片
知识点:1.offset() 方法返回或设置匹配元素相对于文档的偏移(位置)
返回第一个匹配元素的偏移坐标。
该方法返回的对象包含两个整型属性:top 和 left,以像素计。此方法只对可见元素有效。
2.scrollTop():方法返回或设置匹配元素的滚动条的垂直位置。返回滚动条的垂直位置
innerHeight(): 返回滚动条的高度,当移动滚动条的位置,innerHeight()的值不变
scrollHeight: 其实不是“滚动条的高度",而是表示滚动条需要滚动的高度,即内部div的高度
参考链接:https://blog.csdn.net/wu_dada/article/details/78094991
实现方法是判断是否到了页面的最底部:
$('#thumbnailcontainer, .scroll-table-wrap').on('scroll', function () {
if (loadedImages >= maximumLoadedImages) {
if ($(this)[0].scrollHeight - $(this).innerHeight() - $(this).scrollTop() < 5) {
_messagebox.newNotify2(GlobalStringsForAssets.MAXIMUM_LOADED_ASSETS, "", -1);
}
return;
}
if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight - 60) {
if (inDelay) { return; }
CallGetImages($(this), false);
}
})
function CallGetImages($ctl, delayed) {
if (delayed) {
if ($ctl.scrollTop() + $ctl.innerHeight() >= $ctl[0].scrollHeight - 60) {
GetImages();
}
inDelay = false;
return;
}
inDelay = true;
setTimeout(function () {
CallGetImages($ctl, true);
}, 100);
}
function GetImages() {
var timer = null;
if (getImagesXhr != null) {
getImageQueued = true;
return;
}
var columnQueryData = CollectQueryData();
var sortdata;
if (modelPageType === 'brand') {
sortdata = $('#brandSortFilter > button').attr('sortcolumn') + ',' + $('#brandsortdirection').attr('sortdirection');
}
else {
sortdata = $('#sortFilter > button').attr('sortcolumn') + ',' + $('#sortdirection').attr('sortdirection');
}
var searchTerm = '';
if (modelPageType == 'brand')
searchTerm = $('#brandsearchbox').val().trim();
else
searchTerm = $('#searchbox').val().trim();
var searchTags = null;
if (modelPageType !== 'brand')
searchTags = $('#additionalTags').autocomplete("getTags");
var currentSearch = JSON.stringify({ Columns: columnQueryData, SearchTerm: searchTerm, Tags: searchTags, Sorting: sortdata, PageType: pageType });
if (lastSearch == currentSearch && getImagesXhr !== null) {
// Already running a query. Wait until it finishes.
return;
}
var newSearch = false;
if (lastSearch != currentSearch) {
ClearSearch();
newSearch = true;
lastSearch = currentSearch;
if (getImagesXhr !== null) {
getImagesXhr.abort();
getImagesXhr = null;
if (modelPageType == 'brand' && getCollectionsXhr !== null) {
getCollectionsXhr.abort();
getCollectionsXhr = null;
}
}
lastClickedAssetId = '';
selectedCnt = 0;
}
if (newSearch || cachedAssets == null) {
clearTimeout(timer);
$('.centered').show();
imagesQueryData = { Skip: loadedImages, Batch: 50, Columns: columnQueryData, SearchTerm: searchTerm, Tags: searchTags, Sorting: sortdata, PageType: pageType };
getImagesXhr = $.ajax({
url: '/Assets/GetImages',
type: 'POST',
dataType: 'json',
data: JSON.stringify(imagesQueryData),
contentType: 'application/json; charset=utf-8',
success: function (result) {
if (result.success) {
imageData = result.data;
ShowAssets(imageData);
showMainSearchList(imageData, searchTerm,"#mainSearchBoxList");
} else {
console.log("error");
}
getImagesXhr = null;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
getImagesXhr = null;
},
async: true,
processData: true,
complete: function () {
timer=setTimeout("$('.centered').hide()", 400);
getImagesXhr = null;
if (getImageQueued) {
getImageQueued = false;
GetImages();
}
if (newSearch || parseInt($('.numberOfSearch').text()) < loadedImages) {
GetAssetCount(JSON.stringify({ Columns: columnQueryData, SearchTerm: searchTerm, Tags: searchTags, Sorting: sortdata, PageType: pageType }));
}
CacheAssets(columnQueryData, searchTerm, searchTags, sortdata, pageType);
}
});
} else {
imageData = cachedAssets;
cachedAssets = null;
ShowAssets(imageData);
if (parseInt($('.numberOfSearch').text()) < loadedImages) {
GetAssetCount(JSON.stringify({ Columns: columnQueryData, SearchTerm: searchTerm, Tags: searchTags, Sorting: sortdata, PageType: pageType }));
}
CacheAssets(columnQueryData, searchTerm, searchTags, sortdata, pageType);
}
}
完整的代码为:
jQuery:实现图片按需加载的方法,当要显示内容的高度超过了页面的高度,按需加载,根据滚动条的位置来判断页面显示的内容的更多相关文章
- Jquery实现图片的预加载与延时加载
有很多项目经常会需要判断图片加载完成后执行相应的操作,或者需要图片延迟加载,网上虽然已经有很不错的插件,但要为这些效果还得单独加载一个插件的话总感觉有点不舒服,干脆自己写了个方法: 1 2 3 4 5 ...
- 使用jQuery实现图片懒加载原理
原文:https://www.liaoxuefeng.com/article/00151045553343934ba3bb4ed684623b1bf00488231d88d000 在网页中,常常需要用 ...
- JQuery缓冲加载图片插件lazyload.js的使用方法
lazyload.js是一个基于JQuery的插件,可以用来缓冲加载图片.如果一个网页很长并且有很多图片的话,下载图片就需要很多时间,那么就会影响整个网页的加载速度,而这款延迟加载插件,会通过你的滚动 ...
- jquery插件图片延时加载实例详解
效果预览:http://keleyi.com/keleyi/phtml/image/index.htm 使用方法:1.导入JS插件 <script src="http://keleyi ...
- jquery实现图片预加载
使用jquery实现图片预加载提高页面加载速度和用户体,本就为大家详细分析jquery图片预加载的实现原理. 什么时候使用图片预加载? 如果页面使用了很多不是最初加载便可见的图片,有必要进行预加载: ...
- jQuery实现图片预加载提高页面加载速度和用户体验
我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题呢?首先我们会想到的是提高服务器性能,使用静态缓存等手段来加快图 ...
- jQuery的图片懒加载
jQuery的图片懒加载 function imgLazyLoad(options) { var settings = { Id: $('img'), threshold: 100, effectsp ...
- 基于jQuery的图片加载loading效果插件
基于jQuery的图片加载loading效果插件 图片loading的效果是网页中比较常见的,尤其是对大图片,loading效果让用户能够明白图片加载的过程. 实现思路也是比较简单的: $.fn.Lo ...
- jquery实现图片预加载提高页面加载速度
使用jquery实现图片预加载提高页面加载速度和用户体 我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题 呢?首 ...
随机推荐
- 15.翻译系列:EF 6中的级联删除【EF 6 Code-First 系列】
原文链接:https://www.entityframeworktutorial.net/code-first/cascade-delete-in-code-first.aspx EF 6 Code- ...
- 【转】使用minizip解压缩多个文件(基于zlib)
原帖子:使用minizip解压缩多个文件(基于zlib) 写作目的:之前在网上看到很多人在寻找可以解压缩多个文件的程序,其中有尝试zlib的,使用zlib的源码可以生成后缀为点gz的压缩文件,但是一次 ...
- SQL Server 2016新特性:数据库级别配置
新的 ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL) 用来配置数据库级别配置. 这个语句可以配置每个数据库的配置: 清理过程cache 设置MA ...
- 查看安装的react-native和react版本
转:http://blog.csdn.net/miss_ok/article/details/52777115 npm info React-native(目前是0.34.1) 知道最新版本后,通过以 ...
- 点云NDT配准方法介绍
三维配准中经常被提及的配准算法是ICP迭代的方法,这种方法一般般需要提供一个较好的初值,也就是需要粗配准,同时由于算法本身缺陷,最终迭代结果可能会陷入局部最优,导致配准失败,往往达不到我们想要的效果. ...
- 不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁
不要在 foreach 循环里进行元素的 remove/add 操作.remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁. 正例: Iterator&l ...
- 移动网页广告引入mraid.js使用指南
在网上找mraid相关资料,相对比较少,大多都是API介绍,概念介绍等,没有一份详细的移动端网页广告使用教程,经过自己两天的摸索,完成了开发的移动端网页版的广告加入mraid功能. 背景: 我开发了移 ...
- Python连接Mssql
此篇使用的是Python3.6 下载pymssql包 打开网址http://www.lfd.uci.edu/~gohlke/pythonlibs/ 用pip安装whl文件.在cmd中输入 pip in ...
- MySQL命令学习
上面两篇博客讲了MySQL的安装.登录,密码重置,为接下来的MySQL命令学习做好了准备,现在开启MySQL命令学习之旅吧. 首先打开CMD,输入命令:mysql -u root -p 登录MySQ ...
- 【Zookeeper系列】ZooKeeper伸缩性(转)
原文地址:https://www.cnblogs.com/sunddenly/p/4143306.html 一.ZooKeeper中Observer 1.1 ZooKeeper角色 经过前面的介绍,我 ...