实现图片按需加载的方法,当要显示内容的高度超过了页面的高度,按需加载,根据滚动条的位置来判断页面显示的内容

这个类似于京东或淘宝页面,根绝页面的滚动,显示下面的内容

如下图所示,一开始并不是所有的图片都显示,当滚动条移动到页面最下面的时候,再显示下面的内容

解决思路:通过判断滚动条是否滚动到了页面的最下面,如果滚动到了页面的最下面,则重新加载图片

知识点: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:实现图片按需加载的方法,当要显示内容的高度超过了页面的高度,按需加载,根据滚动条的位置来判断页面显示的内容的更多相关文章

  1. Jquery实现图片的预加载与延时加载

    有很多项目经常会需要判断图片加载完成后执行相应的操作,或者需要图片延迟加载,网上虽然已经有很不错的插件,但要为这些效果还得单独加载一个插件的话总感觉有点不舒服,干脆自己写了个方法: 1 2 3 4 5 ...

  2. 使用jQuery实现图片懒加载原理

    原文:https://www.liaoxuefeng.com/article/00151045553343934ba3bb4ed684623b1bf00488231d88d000 在网页中,常常需要用 ...

  3. JQuery缓冲加载图片插件lazyload.js的使用方法

    lazyload.js是一个基于JQuery的插件,可以用来缓冲加载图片.如果一个网页很长并且有很多图片的话,下载图片就需要很多时间,那么就会影响整个网页的加载速度,而这款延迟加载插件,会通过你的滚动 ...

  4. jquery插件图片延时加载实例详解

    效果预览:http://keleyi.com/keleyi/phtml/image/index.htm 使用方法:1.导入JS插件 <script src="http://keleyi ...

  5. jquery实现图片预加载

    使用jquery实现图片预加载提高页面加载速度和用户体,本就为大家详细分析jquery图片预加载的实现原理. 什么时候使用图片预加载? 如果页面使用了很多不是最初加载便可见的图片,有必要进行预加载: ...

  6. jQuery实现图片预加载提高页面加载速度和用户体验

    我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题呢?首先我们会想到的是提高服务器性能,使用静态缓存等手段来加快图 ...

  7. jQuery的图片懒加载

    jQuery的图片懒加载 function imgLazyLoad(options) { var settings = { Id: $('img'), threshold: 100, effectsp ...

  8. 基于jQuery的图片加载loading效果插件

    基于jQuery的图片加载loading效果插件 图片loading的效果是网页中比较常见的,尤其是对大图片,loading效果让用户能够明白图片加载的过程. 实现思路也是比较简单的: $.fn.Lo ...

  9. jquery实现图片预加载提高页面加载速度

    使用jquery实现图片预加载提高页面加载速度和用户体 我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题 呢?首 ...

随机推荐

  1. [转]epoll详解

    什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll.当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new AP ...

  2. Android应用资源分析(老罗链接整理)

    1.Android资源管理框架(Asset Manager)简要介绍和学习计划 2.Android应用程序资源的编译和打包过程分析 3.Android应用程序资源的查找过程分析 https://my. ...

  3. Asp.Net WebApi 跨域设置

    跨越问题主要发生在客户端ajax请求时,为了安全设置,默认webapi是不允许ajax跨越请求的,不过有方法设置让支持跨越,我说说最常见的两种方法 一.jquery jsonp 缺点:JSONP也有局 ...

  4. 【iCore4 双核心板_ARM】例程三十:U_DISK_IAP_FPGA实验——更新升级FPGA

    实验现象及操作说明: 1.将升级文件拷入U盘system文件夹中,通过U盘转接线将U盘连接到iCore4 USB OTG接口. 2.烧写程序成功,绿色ARM·LED灯点亮,三色FPGA·LED灯循环点 ...

  5. ios vue2.0使用html5中的audio标签不能播放音乐

    我写了一个M端播放音乐的组件,使用html5的audio标签 然后我使用watch监测currentSong 在浏览器中看到audio渲染的如下: 单独访问渲染出来的audio中url可以播放音乐,为 ...

  6. hdoj:2049

    #include <iostream> using namespace std; ]; /* n 个 数中 m个错排 转化为:充n个数中选取m个数,共有C(n,m)中,选取的m个数进行全部 ...

  7. 通过端口映射连接不同网段的oracle

    oracle在内网,只有特殊机器能访问,通过做端口映射,可以以这个特殊机器作为“跳板”完成本机对远程oracle的连接. “跳板”机器是windows,需要在该机器上执行netsh命令: netsh ...

  8. 微信小程序开发填坑指南V1

    近期用了一星期的时间,开发了一个小程序.小程序名称是:小特Jarvis,取自钢铁侠的管家. 后台采用C#编写,WebAPI接口.其实开发时间并不多,小程序本身提供的API,相比公众号的API来说,已经 ...

  9. stl综合

    区别: List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]. Vector ...

  10. Mysql分组查询group by语句详解

    (1) group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组(2) group by可用于单个字段分组,也可用于多个字段分组 select * from employee; ...