Javascript 滚动时使用ajax加载内容
我使用jquerytools插件作为图像滑块(),但由于图像量很大,我需要一次加载几个图像。因为它是javascript编码的,所以据我所知,我无法获得滚动位置。我想在最后一张图片出现或类似的情况出现时立即加载它们。我不知道我把它放在哪里了,什么也不知道 这是我的密码Javascript 滚动时使用ajax加载内容,javascript,jquery,ajax,scroll,Javascript,Jquery,Ajax,Scroll,我使用jquerytools插件作为图像滑块(),但由于图像量很大,我需要一次加载几个图像。因为它是javascript编码的,所以据我所知,我无法获得滚动位置。我想在最后一张图片出现或类似的情况出现时立即加载它们。我不知道我把它放在哪里了,什么也不知道 这是我的密码 请给我点光 试试这样的东西 $('#scrollable').find('img:last').load(function() { //load the content }); 或者找到上一张图像的offse
请给我点光 试试这样的东西
$('#scrollable').find('img:last').load(function() {
//load the content
});
或者找到上一张图像的offset
位置/位置,并在滚动时到达offset位置时尝试加载内容
HTML:
<div>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<span>Hello !!</span>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</div>
$(document).ready(function() {
$('div').scroll(function() {
var pos = $('div').scrollTop();
var offset = $('span').offset().top;
if(pos >= offset ) {
alert('you have reached your destiny');
}
});
});
Javascript:
<div>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<span>Hello !!</span>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</div>
$(document).ready(function() {
$('div').scroll(function() {
var pos = $('div').scrollTop();
var offset = $('span').offset().top;
if(pos >= offset ) {
alert('you have reached your destiny');
}
});
});
这里有一个快速的演示
虽然演示并没有满足您的全部要求,但我相信它确实为您提供了一些进一步操作的依据:)尝试类似的方法
$('#scrollable').find('img:last').load(function() {
//load the content
});
或者找到上一张图像的offset
位置/位置,并在滚动时到达offset位置时尝试加载内容
HTML:
<div>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<span>Hello !!</span>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</div>
$(document).ready(function() {
$('div').scroll(function() {
var pos = $('div').scrollTop();
var offset = $('span').offset().top;
if(pos >= offset ) {
alert('you have reached your destiny');
}
});
});
Javascript:
<div>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<span>Hello !!</span>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</div>
$(document).ready(function() {
$('div').scroll(function() {
var pos = $('div').scrollTop();
var offset = $('span').offset().top;
if(pos >= offset ) {
alert('you have reached your destiny');
}
});
});
这里有一个快速的演示
虽然演示并没有满足您的全部要求,但我相信它确实为您提供了一些进一步操作的指示:),可以通过以下方式进行:
//When the DOM is ready...
$(document).ready(function() {
//When the user scrolls...
$(window).scroll(function() {
var tolerance = 800,
scrollTop = $(window).scrollTop();
//If the the distance to the top is greater than the tolerance...
if(scrollTop > tolerance) {
//Do something. Ajax Call, Animations, whatever.
}
}) ;
});
这应该能奏效
编辑:因为您没有使用本机滚动,我们必须对代码进行一些修复:
//When the DOM is ready...
$(document).ready(function() {
//When the user scrolls...
$("div.scrollable").find(".next").click(function() {
var tolerance = 800,
// The absolute value of the integer associated
// to the top css property
scrollTop = Math.abs(parseInt($("div.items").css("top")));
//If the the distance to the top is greater than the tolerance...
if(scrollTop > tolerance) {
//Do something. Ajax Call, Animations, whatever.
}
}) ;
});
这可以通过以下方式实现:
//When the DOM is ready...
$(document).ready(function() {
//When the user scrolls...
$(window).scroll(function() {
var tolerance = 800,
scrollTop = $(window).scrollTop();
//If the the distance to the top is greater than the tolerance...
if(scrollTop > tolerance) {
//Do something. Ajax Call, Animations, whatever.
}
}) ;
});
这应该能奏效
编辑:因为您没有使用本机滚动,我们必须对代码进行一些修复:
//When the DOM is ready...
$(document).ready(function() {
//When the user scrolls...
$("div.scrollable").find(".next").click(function() {
var tolerance = 800,
// The absolute value of the integer associated
// to the top css property
scrollTop = Math.abs(parseInt($("div.items").css("top")));
//If the the distance to the top is greater than the tolerance...
if(scrollTop > tolerance) {
//Do something. Ajax Call, Animations, whatever.
}
}) ;
});
首先,您需要使用jQuery来实现此目的
第二,在页面上放置一个占位符以包含数据
<table id="dataTable" class="someClass" style="border-collapse: collapse;">
<colgroup>
<col width="12%" />
<col width="12%" />
<col width="12%" />
<!-- Define your column widths -->
</colgroup>
</table>
getData函数变量被传递到scrolltable插件中,在滚动表格时会根据需要调用它。回调和上下文被传入,插件使用它们来管理您正在操作的对象(上下文)和web的异步性质(回调)
GetData(注意这个例子)webmethod需要返回一个包含一些关键信息的JSON对象,服务器端代码如何实现这一点取决于您,但是这个插件需要的对象如下。“前一页”和“后一页”数据用于触发何时加载更多数据,基本上,您可以滚动浏览中间/活动页面,但当您开始在“前一页”或“后一页”中看到数据时,我们将需要获取更多数据
return new {
// TotalRows in the ENTIRE result set (if it weren't paged/scrolled)
TotalRows = tableElement.Element("ResultCount").Value,
// The current position we are viewing at
Position = startAt,
// Number of items per "page"
PageSize = tableElement.Element("PageSize").Value,
// Number of pages we are working with (3)
PageCount = tableElement.Element("PageCount").Value,
// Data page prior to active results
PriorData = tbodyTop.Html(),
// Data to display as active results
CurrentData = tbodyCtr.Html(),
// Data to display after active results
PostData = tbodyBot.Html()
};
接下来是插件本身
/// <reference path="../../js/jquery-1.2.6.js" />
(function($) {
$.fn.scrolltable = function(getDataFunction) {
var setData = function(result, context) {
var timeoutId = context.data('timeoutId');
if (timeoutId) {
clearTimeout(timeoutId);
context.data('timeoutId', null);
}
var $table = context.find("table");
var $topSpacer = $table.find('#topSpacer');
var $bottomSpacer = $table.find('#bottomSpacer');
var $newBodyT = $table.children('#bodyT');
var $newBodyC = $table.children('#bodyC');
var $newBodyB = $table.children('#bodyB');
var preScrollTop = context[0].scrollTop;
$newBodyT.html(result.PriorData);
$newBodyC.html(result.CurrentData);
$newBodyB.html(result.PostData);
var rowHeight = $newBodyC.children('tr').height() || 20;
var rowCountT = $newBodyT.children('tr').length;
var rowCountC = $newBodyC.children('tr').length;
var rowCountB = $newBodyB.children('tr').length;
result.Position = parseInt(result.Position);
$newBodyC.data('firstRow', result.Position);
$newBodyC.data('lastRow', (result.Position + rowCountC));
context.data('batchSize', result.PageSize);
context.data('totalRows', result.TotalRows);
var displayedRows = rowCountT + rowCountC + rowCountB;
var rowCountTopSpacer = Math.max(result.Position - rowCountT - 1, 0);
var rowCountBottomSpacer = result.TotalRows - displayedRows - rowCountTopSpacer;
if (rowCountTopSpacer == 0) {
$topSpacer.closest('tbody').hide();
} else {
$topSpacer.closest('tbody').show();
$topSpacer.height(Math.max(rowCountTopSpacer * rowHeight, 0));
}
if (rowCountBottomSpacer == 0) {
$bottomSpacer.closest('tbody').hide();
} else {
$bottomSpacer.closest('tbody').show();
$bottomSpacer.height(Math.max(rowCountBottomSpacer * rowHeight, 0));
}
context[0].scrollTop = preScrollTop; //Maintain Scroll Position as it sometimes was off
};
var onScroll = function(ev) {
var $scrollContainer = $(ev.target);
var $dataTable = $scrollContainer.find('#dataTable');
var $bodyT = $dataTable.children('tbody#bodyT');
var $bodyC = $dataTable.children('tbody#bodyC');
var $bodyB = $dataTable.children('tbody#bodyB');
var rowHeight = $bodyC.children('tr').height();
var currentRow = Math.floor($scrollContainer.scrollTop() / rowHeight);
var displayedRows = Math.floor($scrollContainer.height() / rowHeight);
var batchSize = $scrollContainer.data('batchSize');
var totalRows = $scrollContainer.data('totalRows');
var prevRowCount = $bodyT.children('tr').length;
var currRowCount = $bodyC.children('tr').length;
var postRowCount = $bodyB.children('tr').length;
var doGetData = (
(
(currentRow + displayedRows) < $bodyC.data('firstRow') //Scrolling up
&& (($bodyC.data('firstRow') - prevRowCount) > 1) // ...and data isn't already there
)
||
(
(currentRow > $bodyC.data('lastRow')) //Scrolling down
&& (($bodyC.data('firstRow') + currRowCount + postRowCount) < totalRows) // ...and data isn't already there
)
);
if (doGetData) {
var batchSize = $scrollContainer.data('batchSize');
var timeoutId = $scrollContainer.data('timeoutId');
if (timeoutId) {
clearTimeout(timeoutId);
$scrollContainer.data('timeoutId', null);
}
timeoutId = setTimeout(function() {
getDataFunction(setData, $scrollContainer, currentRow, batchSize);
}, 50);
$scrollContainer.data('timeoutId', timeoutId);
}
};
return this.each(function() {
var $dataTable = $(this);
if (!getDataFunction)
alert('GetDataFunction is Required');
var batchSize = batchSize || 25;
var outerContainerCss = outerContainerCss || {};
var defaultContainerCss = {
overflow: 'auto',
width: '100%',
height: '200px',
position: 'relative'
};
var containerCss = $.extend({}, defaultContainerCss, outerContainerCss);
if (! $dataTable.parent().hasClass('_outerContainer')) {
$dataTable
.wrap('<div class="_outerContainer" />')
.append($('<tbody class="spacer"><tr><td><div id="topSpacer" /></td></tr></tbody>'))
.append($('<tbody id="bodyT" />'))
.append($('<tbody id="bodyC" />'))
.append($('<tbody id="bodyB" />'))
.append($('<tbody class="spacer"><tr><td><div id="bottomSpacer" /></td></tr></tbody>'));
}
var $scrollContainer = $dataTable.parent();
$scrollContainer
.css(containerCss)
.scroll(onScroll);
getDataFunction(setData, $scrollContainer, 1, batchSize);
});
};
})(jQuery);
//
(函数($){
$.fn.scrolltable=函数(getDataFunction){
var setData=函数(结果、上下文){
var timeoutId=context.data('timeoutId');
if(超时ID){
clearTimeout(timeoutId);
context.data('timeoutId',null);
}
var$table=context.find(“表”);
var$topSpacer=$table.find(“#topSpacer”);
var$bottomSpacer=$table.find(“#bottomSpacer”);
var$newBodyT=$table.children('#bodyT');
var$newBodyC=$table.children(“#bodyC”);
var$newBodyB=$table.children(“#bodyB”);
var preScrollTop=context[0]。scrollTop;
$newBodyT.html(result.PriorData);
$newBodyC.html(result.CurrentData);
$newBodyB.html(result.PostData);
var rowHeight=$newBodyC.children('tr').height();
var rowCountT=$newBodyT.children('tr').length;
var rowCountC=$newBodyC.children('tr').length;
var rowCountB=$newBodyB.children('tr').length;
result.Position=parseInt(result.Position);
$newBodyC.data('firstRow',result.Position);
$newBodyC.data('lastRow',(result.Position+rowCountC));
context.data('batchSize',result.PageSize);
context.data('totalRows',result.totalRows);
var displayedRows=rowCountT+rowCountC+rowCountB;
var rowCountTopSpacer=Math.max(result.Position-rowCountT-1,0);
var rowCountBottomSpacer=result.TotalRows-displayedRows-rowCountTopSpacer;
if(rowCountTopSpacer==0){
$topSpacer.closest('tbody').hide();
}否则{
$topSpacer.closest('tbody').show();
$topSpacer.height(数学最大值(rowCountTopSpacer*rowHeight,0));
}
如果(rowCountBottomSpacer==0){
$bottomSpacer.closest('tbody').hide();
}否则{
$bottomSpacer.closest('tbody').show();
$bottomSpacer.height(数学最大值(rowCountBottomSpacer*rowHeight,0));
}
上下文[0]。scrollTop=preScrollTop;//保持滚动位置,因为它有时处于关闭状态
};
var onScroll=功能(ev){
变量$scrollContainer=$(ev.target);
var$dataTable=$scrollContainer.find(“#dataTable”);
var$bodyT=$dataTable.children('tbody#bodyT');
var$bodyC=$dataTable.children('tbody#bodyC');
var$bodyB=$dataTable.children('tbody#bodyB');
var rowHeight=$bodyC.children('tr').height();
var currentRow=Math.floor($scrollContainer.scrollTop()/rowHeight);
var displayedRows=Math.floor($scrollContainer.height()/rowHeight);
var batchSize=$scrollContainer.data('batchSize');
var totalRows=$scrollContainer.data('totalRows');
var prevRowCount=$bodyT.children('tr').length;
var currowcount=$bodyC.children('tr').length;
var postRowCount=$bodyB.children('tr').length;
var doGetData=(
(
(currentRow+displayedRows)<$bodyC.data('firstRow'))