分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

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

发布时间:2023-09-06 02:28责任编辑:赖小花关键词: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:实现图片按需加载的方法,当要显示内容的高度超过了页面的高度,按需加载,根据滚动条的位置来判断页面显示的内容

原文地址:https://www.cnblogs.com/fuhuirong/p/10216066.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved