2016-11-18 1 views
0

Ich habe ein div-Element mit Position absolut und Überlauf blättern wie folgt aus:Lazy Load und Infinitiv Scroll-Problem in jQuery, um neue Höhe eines Elements mit absoluter Position zu finden?

<style> 
.sevencov { 
    position: absolute; 
    width: 61.333%; 
    left: 16.667%; 
    top: 46px; 
    bottom: 0; 
    right: 0; 
    overflow: auto; 
} 
</style> 

<div class="sevencov"> 
    <a id="load-more" class="load-more" title="Load More" onclick="myFunction()"></a> 
</div> 

ich die Last mehr Taste zu einem bestimmten% des div auf Blättern feuern wollen, versucht, mit jQuery ich diesen:

$(function() { 
    var prevHeight = $('.sevencov').height(); 
    $('.sevencov').scroll(function() { 
      var curHeight = $(this).height();   
      if ($(this).scrollTop() > ($(document).height() - curHeight)*44) { 
       $('#load-more').click(); 
      }    

    }); 
}); 

Aber das Problem ist, dass es mehrere Male ausgelöst wird, weil die Höhe meiner div sevencov immer gleich ist und ich bin nicht in der Lage, eine Lösung zu finden, was mache ich falsch?

+1

Ich habe euch gegeben die Arbeitskopie des Codes. Bitte guck dir das an. – Aruna

Antwort

1

als Lazy Loading

genannt Dies verwenden Sie mit spielen können scrollTop, innerHeight und scrollHeight wie unten.

Dokumentation

scrollTop - Ermittelt die aktuelle berechnete Innenhöhe (einschließlich padding aber Grenze nicht) für das Element

- für das Element

innerHeight die aktuelle vertikale Position der Bildlaufleiste Holen

scrollHeight - Die Höhe des Inhalts eines Elements, einschließlich des Inhalts, der aufgrund von Überlauf nicht auf dem Bildschirm sichtbar ist

In der folgenden snippet können Sie Ihren ajax Anruf platzieren.

Auch die folgenden snippet hatten window.loadProfile = loadProfile;, um sicherzustellen, dass Ihre Inline onclick mit den Parametern onClick="loadProfile(184, '', 'user69')" arbeitet. Wenn möglich, können Sie diese ersetzen mit jquery click event wie $('#load-more').on('click', function(){ /* ajax call */ });

$(function() { 
 
    
 
    var testContent = 'The quick brown fox jumps over the lazy dog. '; 
 
    var increment = 20; 
 
    var contentLoading = false; 
 
    var sevencovDiv = $('.sevencov'); 
 
    
 
    function loadProfile(id, text, user) { 
 
    // You can do a ajax call here instead of a below code 
 
    for(var i = 0; i < increment; i++) { 
 
     sevencovDiv.html(sevencovDiv.html() + testContent); 
 
    } 
 
    
 
    contentLoading = false; // make this false once the content loaded from ajax call 
 
    } 
 
    
 
    loadProfile(); 
 
    
 
    window.loadProfile = loadProfile; 
 

 
    $('.sevencov').scroll(function() {     
 
     if($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) { 
 
     if(!contentLoading) { 
 
      //loadMore(); 
 
      contentLoading = true; 
 
      $('#load-more').click(); 
 
     } 
 
    } 
 

 
    }); 
 
});
.sevencov { 
 
    position: absolute; 
 
    width: 61.333%; 
 
    left: 16.667%; 
 
    top: 46px; 
 
    bottom: 0; 
 
    right: 0; 
 
    overflow: auto; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="sevencov"> 
 
    <a id="load-more" class="load-more" title="Load More" onClick="loadProfile(184, '', 'user69')"></a> 
 
</div>

+0

Dank Aruna, aber meine Last mehr Taste hat dieses Attribut 'onClick =„Loadprofile (184, ‚‘, ‚user69‘)“' und es ändert sich jedes Mal, es neue Ajax-Daten lädt – NineCattoRules

+0

@SimonLeCat sicher, werde ich den Code aktualisieren – Aruna

+0

es für mich schwierig, weil ich die faule Taste in PHP (und ich möchte die Dinge ähnlich) – NineCattoRules

1

Wie in einer anderen Frage erwähnt (here), die Höhe eines Überströmelement zu erhalten, sollten Sie $('.sevencov')[0].scrollHeight statt .height()

+0

ok danke, änderte es das auch 'if ($ (this) .scrollTop()> curHeight * 0,7) {' ... die Höhe korrekt berechnet wird aber wieder die jQuery feuert mehrere Mal, wenn die Last-Taste mehr – NineCattoRules

+0

zB. Es wird ausgelöst, wenn 'curHeight = 24386' und' scrollTop = 2410' keinen Sinn ergeben. – NineCattoRules

+0

Es wird mehrmals ausgelöst, da es sich im Scroll-Callback befindet. Wenn Sie 100px scrollen, wird die Bildlauffunktion oft aufgerufen. – Eduardo

Verwandte Themen