Skip to content

Scrolls to top on recalculate(). #94

@jringeisen

Description

@jringeisen

Hi 👋 I've implemented infinite scrolling with the Pexels API and when I scroll down to load new results the scroll bar jumps to the top of the screen. The new images are loaded but I now have to scroll all the way back down and when I do it jumps back up again. If I remove the macy.js code it works fine but then I don't have the masonry effect. Any ideas on what could be causing this? I'm using Laravel and Livewire, could Livewire be interfering?

<div>
    <div id="macy-container" class="relative grid grid-cols-4">
        @foreach($images as $key => $image)
            <div x-data="{ show: '' }" @mouseover="show = {{$key}}" @mouseleave="show = ''" class="group cursor-pointer">
                <img wire:click="$emit('openModal', 'pexels.modals.view', {{ json_encode(['image' => $image]) }})" src="{{$image['src']['large']}}"/>
                <div x-show="show === {{$key}}" x-transition class="absolute bottom-0 w-full">
                    <div class="flex items-center justify-between w-full bg-black bg-opacity-50 px-2 py-2">
                        <a href="{{$image['photographer_url']}}" target="_blank" class="ml-1 text-white text-xs font-semibold md:text-sm">
                            {{$image['photographer']}}
                        </a>
                        <div class="flex items-center">
                            <span class="mr-3">
                                <svg wire:click="downloadImage('{{$image['src']['original']}}')" class="w-4 h-4 text-white cursor-pointer md:w-6 md:h-6" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg>
                            </span>
                            <span>
                                <svg wire:click="$emit('openModal', 'pexels.modals.create', {{json_encode(['photo_data' => $image])}})" class="w-4 h-4 text-white cursor-pointer md:w-6 md:h-6" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M4 4a2 2 0 00-2 2v8a2 2 0 002 2h12a2 2 0 002-2V8a2 2 0 00-2-2h-5L9 4H4zm7 5a1 1 0 00-2 0v1H8a1 1 0 000 2h1v1a1 1 0 002 0v-1h1a1 1 0 000-2h-1V9z" fill-rule="evenodd"></path></svg>
                            </span>
                        </div>
                    </div>
                </div>
            </div>
        @endforeach
    </div>

    <div x-data="{ shown: false }" x-intersect="$wire.call('loadMoreImages', '{{$next_page_url}}')" class="flex justify-center"></div>
</div>

@push('scripts')
    <script src="https://cdn.jsdelivr.net/npm/macy@2"></script>
@endpush

@push('js')
    <script>
        document.addEventListener('livewire:load', function () {
            const macy = Macy({
                container: '#macy-container',
                trueOrder: false,
                waitForImages: false,
                margin: 18,
                columns: 5,
                breakAt: {
                    1200: 5,
                    940: 3,
                    520: 2,
                    400: 1
                }
            });

            document.addEventListener('livewire:update', event => {
                macy.runOnImageLoad(function () {
                    macy.recalculate(true);
                });
            })
        })
    </script>
@endpush

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions