【问题标题】:Jquery conflicting causing jquery on other pages not to workjquery冲突导致其他页面上的jquery不起作用
【发布时间】:2015-04-24 09:30:54
【问题描述】:

我正在尝试在网站上制作视差效果,但是两个页面之间的 jquery 似乎存在冲突。在主页上,当您向下滚动时,所有元素都按原样移动,但是当您转到工作页面并向下滚动时,什么也没有发生。这是 Jquery 的原样(为了便于阅读,我将把 cmets 排除在代码块之外):

$('document').ready(function() {

$('.nav-toggle').click(function() {
  $(this).toggleClass('toggle-animate');
  $('.sidebar').toggleClass('sidebar-animate');
  $('.page-contents').toggleClass('page-contents-animate');

});

});



$(window).scroll(function(){

var wScroll = $(this).scrollTop();
$('.logo').css({
'transform' : 'translate(0px , '+ wScroll /40 +'rem)'
});

//主页脚本

if(wScroll > $('.logo').offset().top - ($(window).height() / 6 )) {
$('.about h1').addClass('about-h1-is-showing');
}

if(wScroll > $('.about h1').offset().top - ($(window).height() / 3.5 )) {
$('.about p').addClass('about-h1-is-showing');
}

if(wScroll > $('.about h1').offset().top - ($(window).height() / 2.5 )) {
$('.about').addClass('about-bg-is-showing');
}

if(wScroll > $('.logo').offset().top) {
$('.symbol').each(function(i){

setTimeout(function(){
$('.symbol').eq(i).addClass('social-is-showing');},
150 * (i+3));
});
}//END HOME PAGE SCRIPT

//工作页面脚本

if(wScroll > $('.logo').offset().top - ($(window).height() / 10 )) {
$('.amorae-desktop').addClass('amorae-desktop-is-showing');
}

if(wScroll > $('.amoraeWork').offset().top - ($(window).height() / 12 )) {
$('.amorae-tablet').addClass('amorae-tablet-is-showing');
}

if(wScroll > $('.amoraeWork').offset().top - ($(window).height() / 8 )) {
$('.amorae-phone').addClass('amorae-phone-is-showing');
}//END WORK PAGE SCRIPT


});

我尝试了很多方法,当我将“工作页面脚本”移动到“主页脚本”上方时,工作页面开始工作,但主页没有。我真的不知道为什么会这样。我已经尝试为主页脚本下方的工作页面创建一个新功能,但仍然遇到同样的问题。

我找到了一种让它们都工作的方法,就是将“WORK PAGE SCRIPT”移动到“HOME PAGE SCRIPT”上方,并将窗口滚动偏移类更改为 .logo

这并不理想,因为我想了解问题所在并知道如何解决它。几天来一直让我发疯,所以任何帮助或建议将不胜感激。下面是解决代码的方法以及指向实时站点的链接。谢谢。

$('document').ready(function() {

$('.nav-toggle').click(function() {
  $(this).toggleClass('toggle-animate');
  $('.sidebar').toggleClass('sidebar-animate');
  $('.page-contents').toggleClass('page-contents-animate');

});

});



$(window).scroll(function(){

var wScroll = $(this).scrollTop();
$('.logo').css({
'transform' : 'translate(0px , '+ wScroll /40 +'rem)'
});

//WORK PAGE SCRIPT

if(wScroll > $('.logo').offset().top - ($(window).height() / 10 )) {
$('.amorae-desktop').addClass('amorae-desktop-is-showing');
}

if(wScroll > $('.logo').offset().top - ($(window).height() / 12 )) {
$('.amorae-tablet').addClass('amorae-tablet-is-showing');
}

if(wScroll > $('.logo').offset().top - ($(window).height() / 8 )) {
$('.amorae-phone').addClass('amorae-phone-is-showing');
}//END WORK PAGE SCRIPT

//主页脚本

if(wScroll > $('.logo').offset().top - ($(window).height() / 6 )) {
$('.about h1').addClass('about-h1-is-showing');
}

if(wScroll > $('.about h1').offset().top - ($(window).height() / 3.5 )) {
$('.about p').addClass('about-h1-is-showing');
}

if(wScroll > $('.about h1').offset().top - ($(window).height() / 2.5 )) {
$('.about').addClass('about-bg-is-showing');
}

if(wScroll > $('.logo').offset().top) {
$('.symbol').each(function(i){

setTimeout(function(){
$('.symbol').eq(i).addClass('social-is-showing');},
150 * (i+3));
});
}//END HOME PAGE SCRIPT


});

Link to live site

【问题讨论】:

  • 在这种情况下尝试使用 jQuery noConflict。
  • @stanze: jQuery.noConflict() 在 jQuery 与另一个也与 $ 一起使用的 JS 库旁边使用时很有用
  • 我不熟悉 jQuery.noConflict ...我得到了一个向我解释问题的答案。不过谢谢,我会调查 jquery 没有冲突

标签: jquery scroll parallax


【解决方案1】:

您的主页上没有类名为 amoraeWork 的元素,所以这段代码:

$('.amoraeWork').offset().top

尝试访问 offset() 会返回 undefined,而尝试访问未定义的 top 会产生错误。后面的代码没有被执行(主页面上存在的元素和工作中丢失的元素也会发生同样的情况)。

在访问它的 offset()top 值之前,您应该检查一个元素是否存在:

  if($('.amoraeWork').length && wScroll > $('.amoraeWork').offset().top - ($(window).height() / 12 )) { 
        // do work here
  }

【讨论】:

  • 啊,我明白了!我已经改变了它并使用了一个名为 section-trigger 的空类并用它来触发视差。因此,如果 jquery 中途出现错误,它会不会在错误之后执行任何操作?我还没有上传工作版本,但它正在工作,谢谢!!
  • 那么如果 jquery 中途出现错误,它会不会在错误之后执行任何操作?
  • 我懒得浏览实时代码,但很好。删除我的帖子并给你+1。干得好。
  • @ironmike 不,幸运的是它没有。空集上的 jQuery 方法不会产生错误,它们只是什么都不做(例如 $('.nonExistantClass').addClass('foo').hide())。但是,您从不存在的 jQuery 元素中请求一个属性,该元素返回 undefined 并尝试访问 undefined 上的属性 (top)是导致错误的原因。
  • @ironmike ...即使做的事情会导致不存在的元素出错,您也不应该在页面上添加不需要的类名,而只需检查元素是否存在(就像我展示的那样在上面的示例中)。
猜你喜欢
  • 2016-01-03
  • 1970-01-01
  • 2014-07-29
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
相关资源
最近更新 更多