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实现图片预加载提高页面加载速度和用户体 我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题 呢?首 ...
随机推荐
- app优化之流量节省
前言:“客户端上传时间戳”的玩法,你玩过么?一起聊聊时间戳的奇技淫巧!,其实这个类似于数据版本号的东西. 缘起:无线时代,流量敏感.APP在登录后,往往要向服务器同步非常多的数据,很费流量,技术上有没 ...
- oracle 函数 输入值,查询数据,返回相应处理结果
create or replace function FUN_SEARCH_ORDERBY ( INSTACEID in varchar2,TYE IN varchar2) return varcha ...
- slackware在vagrant中使用
slackware以简洁干净的系统闻名于世,如果你想学习了解linux,那么slackware是一个很好的选择,其他linux不是不好,他们都太复杂了,复杂的你不知道从哪里开始. 所以,还是slack ...
- jQuery创建元素和添加子元素
var li = $("<li class=\"TopNav arrow\" secondMenu=\"menu_" + i + "\ ...
- iOS开发下载文件速度计算
当我们写下载界面的时候,需要向用户展示每秒下载多少KB,这个时候就需要计算速度.如下: 我用的是AFNetworking来做下载的,我们拿AFHTTPRequestOperation来举列,AFHTT ...
- httpie的使用
安装 brew install httpie 使用 模拟提交表单 http -f POST yhz.me username=nate 显示详细的请求 http -v yhz.me 只显示Header ...
- 【转载】最强NLP预训练模型!谷歌BERT横扫11项NLP任务记录
本文介绍了一种新的语言表征模型 BERT--来自 Transformer 的双向编码器表征.与最近的语言表征模型不同,BERT 旨在基于所有层的左.右语境来预训练深度双向表征.BERT 是首个在大批句 ...
- C语言——数组名、取数组首地址的区别(一)
目录: 1. 开篇 2. 论数组名array.&array的区别 3. array.&array的区别表现在什么地方 4. 讨论 5. 参考 1.开篇 很多博客和贴吧都有讨论这个话题, ...
- 【转】IT大牛博客
原文:http://blog.csdn.net/qq1175421841/article/details/49384841 首届中国最受欢迎50大技术博客获奖名单如下: 第一名:李会军 http:/ ...
- 【原创】SAP/Oracle 集团企业海外全球化实施注意事项: 一带一路本地化 (持续更新)
ABC集团SAP的系统平台已经扩展到全球一百来个国家和地区,SAP系统平台的全球实施项目中, 当时是需要支持当地的业务和法律法规的合规要求. 当时客户也是缺乏当地的资源以及对当地法律法规和业务实践的了 ...