jQuery褪色问题

时间:2018-07-31 21:19:25

标签: javascript jquery css

我对jquery还是很陌生,并且在单击页码时尝试淡入/淡出画廊的页面。页码也应淡入不同的颜色,边框应淡入/淡出。

我对此有2个问题。图像的淡入/淡出在localhost和jsfiddle上有效,但在实时播放时,第一次更改图库页面时会出现问题。而不是渐渐淡入新页面,它看起来好像根本没有动画。第一次单击后,它可以正常工作。可以在这里看到(正如我提到的,这在jsfiddle中不会发生):https://intellidesign.000webhostapp.com/gallery.html

代码在这里,但我也粘贴了下面的jquery:https://jsfiddle.net/adamjroberts91/xpvt214o/524699/

页码周围的边框也有问题。在图库中单击每个数字后,应该从当前数字中删除一个类,并将其添加到被单击的那个类中,但这似乎没有发生。更改所有类的唯一时间是单击返回第1页-从1上删除该类,但不重新添加。

代码(第3页看起来好像没有加载,但当前与第2页图像相同):

// Add the class names for each gallery to variables
const pageOne = '.gallery__page-1';
const pageTwo = '.gallery__page-2';
const pageThree = '.gallery__page-2';

//Add the class names for pagination numbers to variables
const pageNumberOne = '.gallery__pagination-number-1';
const pageNumberTwo = '.gallery__pagination-number-2';
const pageNumberThree    = '.gallery__pagination-number-3';

//Set the selected page and pagination to page 1
let currentPage = pageOne;
let currentPageNumber = pageNumberOne;

//Fade out the current page and fade in the new one
//Change color/outline of pagination numbers to show page selected
$(document).ready(() => {
    $(pageTwo).hide();
    $(pageThree).hide();
    $(pageNumberOne).click(() => {
        $(currentPage).fadeOut('slow', () => {
            $(pageOne).fadeIn('slow');
        });
        currentPage = pageOne;
        setTimeout(() => {
            $(pageNumberOne).addClass('gallery__pagination-number-selected');
            $(currentPageNumber).removeClass('gallery__pagination-number-selected');
        }, 500);
        currentPageNumber = pageNumberOne;
    });
    $(pageNumberTwo).click(() => {
        $(currentPage).fadeOut('slow', () => {
            $(pageTwo).fadeIn('slow');
        });
        currentPage = pageTwo;
        setTimeout(() => {
            $(pageNumberTwo).addClass('gallery__pagination-number-selected');
            $(currentPageNumber).removeClass('gallery__pagination-number-selected');
        }, 500);
        currentPageNumber = pageNumberTwo;
    });
    $(pageNumberThree).click(() => {
        $(currentPage).fadeOut('slow', () => {
            $(pageThree).fadeIn('slow');
        });
        currentPage = pageThree;
        setTimeout(() => {
            $(pageNumberThree).addClass('gallery__pagination-number-selected');
            $(currentPageNumber).removeClass('gallery__pagination-number-selected');
        }, 500);
        currentPageNumber = pageNumberThree;
    });
});

1 个答案:

答案 0 :(得分:0)

我知道这里有很多答案,但是有很多问题,所以我将在这里逐步解决,我可以根据需要更新答案。

无需在CSS中重复您的样式。类的重点是可以在多个元素上使用同一类。只需使用.gallery-page之类的类,而不是复制.gallery__page-1,.gallery__page-等的样式规则。

图像太大。您的某些图片超过20mb;加载此页面所服务的所有140mb花费了52秒。您可以减小图像尺寸/质量设置,但仍可以提供美观的图像集。

不需要存储jQuery选择器字符串,然后重复调用jQuery函数来访问该项目。

//bad
var thing = '.thing';
// later on calling this repeatedly
$(thing).addClass(...

// better
var thing = $( '.thing' );
// later on calling this repeatedly
thing.addClass(...

您的按钮类不起作用,因为在计划超时时超时不使用上下文,而是在调用函数时使用上下文。上下文是指变量值的状态。特别是在您的js中,currentPageNumber设置为超时函数将选择向其添加selected类并将其从中删除的类。如果在超时功能中更新了该变量,它的工作方式将更像您期望的那样,但是id只需使用具有延迟的css过渡而不是js超时即可。

您无需将当前页面存储在javascript中的变量中。只需将诸如.current或.active之类的类附加到dom中的active元素即可。对点击做出反应时,您可以淡出所有页面,解析所单击链接的ID以获取页码,然后淡入新的当前页面。这将修复您的js错误,并在添加更多页面时使代码可重复使用。

我认为淡入效果不起作用,因为jQuery在渲染之前不知道其淡入的元素的大小。您可以尝试在页面上增加一个高度,看看是否可以解决渐变问题。