Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save vipinkundal/129b2050f183f3c9bc5f47838d7242fb to your computer and use it in GitHub Desktop.

Select an option

Save vipinkundal/129b2050f183f3c9bc5f47838d7242fb to your computer and use it in GitHub Desktop.
Infinite Scroll + Masonry + Laravel
/*Include in head section*/
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
/*Include after body in similar order*/
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-infinitescroll/3.0.2/infinite-scroll.pkgd.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/masonry/3.1.2/masonry.pkgd.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/3.0.4/jquery.imagesloaded.min.js"></script>
/*include jquery here */
.grid {
max-width: 1200px;
}
/* reveal grid after images loaded */
.grid.are-images-unloaded {
opacity: 0;
}
.grid__item,
.grid__col-sizer {
width: 32%;
}
.grid__gutter-sizer { width: 2%; }
/* hide by default */
.grid.are-images-unloaded .image-grid__item {
opacity: 0;
}
.grid__item {
margin-bottom: 20px;
float: left;
}
.grid__item img {
display: block;
max-width: 100%;
}
.page-load-status {
display: none; /* hidden by default */
padding-top: 20px;
border-top: 1px solid #DDD;
text-align: center;
color: #777;
}
/*loader-ellips style*/
.loader-ellips {
font-size: 20px; /* change size here */
position: relative;
width: 4em;
height: 1em;
margin: 10px auto;
}
.loader-ellips__dot {
display: block;
width: 1em;
height: 1em;
border-radius: 0.5em;
background: #555; /* change color here */
position: absolute;
animation-duration: 0.5s;
animation-timing-function: ease;
animation-iteration-count: infinite;
}
.loader-ellips__dot:nth-child(1),
.loader-ellips__dot:nth-child(2) {
left: 0;
}
.loader-ellips__dot:nth-child(3) { left: 1.5em; }
.loader-ellips__dot:nth-child(4) { left: 3em; }
@keyframes reveal {
from { transform: scale(0.001); }
to { transform: scale(1); }
}
@keyframes slide {
to { transform: translateX(1.5em) }
}
.loader-ellips__dot:nth-child(1) {
animation-name: reveal;
}
.loader-ellips__dot:nth-child(2),
.loader-ellips__dot:nth-child(3) {
animation-name: slide;
}
.loader-ellips__dot:nth-child(4) {
animation-name: reveal;
animation-direction: reverse;
}
<div class="content-sm container">
<div class="grid are-images-unloaded">
<div class="grid__col-sizer"></div>
@foreach($variables as $variable)
<div class="grid__item">
@include('what ever you want in masonry')
</div>
@endforeach
</div>
{{ $variables->render() }}
<div class="page-load-status">
<div class="loader-ellips infinite-scroll-request">
<span class="loader-ellips__dot"></span>
<span class="loader-ellips__dot"></span>
<span class="loader-ellips__dot"></span>
<span class="loader-ellips__dot"></span>
</div>
<p class="infinite-scroll-last">End of content</p>
<p class="infinite-scroll-error">No more pages to load</p>
</div>
</div>
<script>
$(document).ready(function() {
var $grid = $('.grid').masonry({
itemSelector: 'none', // select none at first
columnWidth: '.grid__col-sizer',
percentPosition: true,
stagger: 30,
// nicer reveal transition
visibleStyle: { transform: 'translateY(0)', opacity: 1 },
hiddenStyle: { transform: 'translateY(100px)', opacity: 0 },
});
// get Masonry instance
var msnry = $grid.data('masonry');
// initial items reveal
$grid.imagesLoaded( function() {
$grid.removeClass('are-images-unloaded');
$grid.masonry( 'option', { itemSelector: '.grid__item' });
var $items = $grid.find('.grid__item');
$grid.masonry( 'appended', $items );
});
var totalPage = {{$variable->lastPage()}} ;
$grid.infiniteScroll({
path: function() {
var pageNumber = ( this.loadCount + 2 );
if(pageNumber <= totalPage){
return '{{$variable->slug}}/?page=' + pageNumber;
}else{
return '';
}
},
append: '.grid__item',
outlayer: msnry,
animate: true,
//if you want to scroll using button
//loadOnScroll: false,
//scrollThreshold: false,
//button: '.view-more-button',
//elementScroll: true,
status:'.page-load-status',
//status:'#loading',
hideNav: 'ul.pagination',
//to debug code in console
//debug: true
});
});
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment