Fix hover to preview once and for all
This commit is contained in:
@@ -1,56 +1,52 @@
|
||||
const sleep = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms));
|
||||
var old_timestamp = document.getElementById('ts_reference').value;
|
||||
function initGalleryPreviews() {
|
||||
const previews = document.querySelectorAll('.preview-gallery');
|
||||
|
||||
function initPreviews() {
|
||||
var thumbs = document.querySelectorAll('div[data-thumbs]');
|
||||
thumbs.forEach(function (thumb) {
|
||||
var thumbsJSON = JSON.parse(thumb.dataset.thumbs);
|
||||
var originalImage = thumb.children[0].children[1].src;
|
||||
var interval;
|
||||
var i = 1;
|
||||
previews.forEach((img) => {
|
||||
// Prevent double initialization
|
||||
if (img.dataset.previewInitialized) return;
|
||||
|
||||
function clear() {
|
||||
thumb.children[0].children[1].src = originalImage;
|
||||
i = 1;
|
||||
clearTimeout(interval);
|
||||
}
|
||||
img.dataset.previewInitialized = 'true';
|
||||
|
||||
function toggle() {
|
||||
if (i == 0) {
|
||||
clear();
|
||||
let images = [];
|
||||
|
||||
try {
|
||||
images = JSON.parse(img.dataset.gallery);
|
||||
} catch (e) {
|
||||
console.error('Invalid gallery JSON', e);
|
||||
return;
|
||||
}
|
||||
|
||||
thumb.children[0].children[1].src = thumbsJSON[i];
|
||||
i = (i + 1) % thumbsJSON.length;
|
||||
}
|
||||
if (images.length <= 1) return;
|
||||
|
||||
function interval() {
|
||||
// Start Preview
|
||||
interval = setInterval(toggle, 700);
|
||||
}
|
||||
const original = img.src;
|
||||
|
||||
thumb.addEventListener('mouseenter', interval);
|
||||
thumb.addEventListener('mouseleave', clear);
|
||||
let index = 0;
|
||||
let interval = null;
|
||||
|
||||
const startPreview = () => {
|
||||
console.log("startPreview");
|
||||
interval = setInterval(() => {
|
||||
index = (index + 1) % images.length;
|
||||
img.src = images[index];
|
||||
}, 700);
|
||||
};
|
||||
|
||||
const stopPreview = () => {
|
||||
console.log("stopPreview");
|
||||
clearInterval(interval);
|
||||
interval = null;
|
||||
|
||||
index = 0;
|
||||
img.src = original;
|
||||
};
|
||||
|
||||
img.addEventListener('mouseenter', startPreview);
|
||||
img.addEventListener('mouseleave', stopPreview);
|
||||
});
|
||||
}
|
||||
|
||||
async function init() {
|
||||
for (let i = 0; i < 9; i++) {
|
||||
var new_timestamp = document.getElementById('ts_reference').value;
|
||||
if (new_timestamp != old_timestamp) {
|
||||
console.log('== Changed ==');
|
||||
initPreviews();
|
||||
break;
|
||||
}
|
||||
console.log('== Didnt Change ==');
|
||||
await sleep(1000);
|
||||
}
|
||||
}
|
||||
// Initial page load
|
||||
document.addEventListener('DOMContentLoaded', initGalleryPreviews);
|
||||
|
||||
window.addEventListener('contentChanged', event => {
|
||||
console.log('== Received contentChanged Event ==');
|
||||
init();
|
||||
});
|
||||
|
||||
initPreviews();
|
||||
// Livewire v3 navigation/update
|
||||
document.addEventListener('contentChanged', initGalleryPreviews);
|
||||
@@ -38,12 +38,19 @@
|
||||
class="aspect-[11/16] w-full object-cover object-center transform-gpu transition-transform duration-500 group-hover:scale-[1.02]"
|
||||
>
|
||||
@elseif ($view === 'thumbnail')
|
||||
@php
|
||||
$galleryImages = $episode->gallery
|
||||
->pluck('thumbnail_url')
|
||||
->filter()
|
||||
->values();
|
||||
@endphp
|
||||
<img
|
||||
src="{{ $episode->gallery->first()?->thumbnail_url }}"
|
||||
src="{{ $galleryImages->first() }}"
|
||||
alt="{{ $episode->title }} - {{ $episode->episode }}"
|
||||
loading="lazy"
|
||||
width="1000"
|
||||
class="w-full object-cover object-center transform-gpu transition-transform duration-500 group-hover:scale-[1.02]"
|
||||
data-gallery='@json($galleryImages)'
|
||||
class="preview-gallery aspect-video w-full object-cover object-center transform-gpu transition-transform duration-500 group-hover:scale-[1.02]"
|
||||
>
|
||||
@endif
|
||||
|
||||
|
||||
@@ -94,3 +94,6 @@
|
||||
|
||||
<!-- Modals -->
|
||||
@include('modals.language-selector')
|
||||
|
||||
<!-- Thumbnail hover -->
|
||||
@vite(['resources/js/preview.js'])
|
||||
@@ -24,5 +24,4 @@
|
||||
</div>
|
||||
{{ $episodes->appends(['tags' => $selectedtags])->links('pagination::tailwind') }}
|
||||
</div>
|
||||
@vite(['resources/js/preview.js'])
|
||||
</div>
|
||||
|
||||
@@ -24,5 +24,4 @@
|
||||
</div>
|
||||
{{ $episodes->appends(['tags' => $selectedtags])->links('pagination::tailwind') }}
|
||||
</div>
|
||||
@vite(['resources/js/preview.js'])
|
||||
</div
|
||||
|
||||
Reference in New Issue
Block a user