Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 滚动时使用ajax加载内容_Javascript_Jquery_Ajax_Scroll - Fatal编程技术网

Javascript 滚动时使用ajax加载内容

Javascript 滚动时使用ajax加载内容,javascript,jquery,ajax,scroll,Javascript,Jquery,Ajax,Scroll,我使用jquerytools插件作为图像滑块(),但由于图像量很大,我需要一次加载几个图像。因为它是javascript编码的,所以据我所知,我无法获得滚动位置。我想在最后一张图片出现或类似的情况出现时立即加载它们。我不知道我把它放在哪里了,什么也不知道 这是我的密码 请给我点光 试试这样的东西 $('#scrollable').find('img:last').load(function() { //load the content }); 或者找到上一张图像的offse

我使用jquerytools插件作为图像滑块(),但由于图像量很大,我需要一次加载几个图像。因为它是javascript编码的,所以据我所知,我无法获得滚动位置。我想在最后一张图片出现或类似的情况出现时立即加载它们。我不知道我把它放在哪里了,什么也不知道

这是我的密码


请给我点光

试试这样的东西

$('#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'))