Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过使用jQuery的函数执行此特定任务?_Javascript_Jquery - Fatal编程技术网

Javascript 如何通过使用jQuery的函数执行此特定任务?

Javascript 如何通过使用jQuery的函数执行此特定任务?,javascript,jquery,Javascript,Jquery,我正在这个垂直滚动画廊工作。 现在我无法解决这个问题,但我需要让这段代码不那么冗长。 我一直在写的代码是重复的。 这是密码 var target1 = $("#myImg1").offset().top; var target2 = $("#myImg2").offset().top; if ($(window).scrollTop() >= target1 - 150 && $(window).scrollTop() <= target1 + 150) {

我正在这个垂直滚动画廊工作。 现在我无法解决这个问题,但我需要让这段代码不那么冗长。 我一直在写的代码是重复的。 这是密码

var target1 = $("#myImg1").offset().top;
var target2 = $("#myImg2").offset().top;

if ($(window).scrollTop() >= target1 - 150 
 && $(window).scrollTop() <= target1 + 150) {
    showBgOnTop('#firstImage','#secondImage');  
}
if ($(window).scrollTop() >= target2 - 150 
 && $(window).scrollTop() <= target2 + 150) {
    showBgOnTop('#secondImage','#firstImage');
}
var target1=$(“#myImg1”).offset().top;
var target2=$(“#myImg2”).offset().top;
如果($(窗口).scrollTop()>=target1-150
&&$(窗口).scrollTop()=target2-150

&&$(window).scrollTop()这实际上是一个jQuery函数

你能做的唯一减少代码的事情就是使用

$(window).scrollTop()
作为变量:

var windowScrollTop = $(window).scrollTop();
剩余部分是一个条件,您不能使用条件作为变量。

这样如何:

function show(image1id, image2id) {
  var target1 = $(image1id).offset().top;
  var target2 = $(image2id).offset().top;

  if (($(window).scrollTop() >= target2 - 150) &&
       $(window).scrollTop() <= target2 + 150)) {
    showBgOnTop(image1id, image2id);
  }
}

show('#firstImage','#secondImage');
show('#secondImage','#firstImage');
功能显示(image1id,image2id){
var target1=$(image1id).offset().top;
var target2=$(image2id).offset().top;
如果($(窗口).scrollTop()>=target2-150)&&
$(窗口).scrollTop()说明
似乎您有一个jQuery对象作为您的目标,它链接到两个图像,并且您希望有多个这样的实例,比如至少2个

所以我的解决方案是用这种格式创建一个对象数组

var array = [
    {target: ['image1', 'image2']}
]
target
是目标元素
id
,值是关联图像的id数组

现在,用户所要做的就是继续以上面显示的格式向数组添加新对象

解决方案
//将目标对象id作为键,将链接/关联元素的数组作为值
var arrs=[
{'myImg1':['firstImage','secondImage']},
{'#myImg2':['#secondImage','#firstImage']},
{#myImg3':['…','…']}//继续在此处添加新项作为对象
],
$windowScrollTop=$(window).scrollTop();//缓存窗口滚动函数
//在这里循环数组
$.each(arrs,function(idx,obj){
用于(obj中的id){
var$el=$(id),//在此处缓存目标元素
args=obj[id],
img1=args[0]。toString(),
img2=args[1]。toString();

如果($windowScrollTop>=$el-150&&$windowScrollTop你能给我们展示一下你的垂直图库应该是什么样子吗?这样我们可以提供更好的答案它的代码很长,但让我在这里告诉你这个想法。随着垂直拇指的移动,与之相关的背景图像会在背景中发生变化。#第一幅图像bg pic移到顶部。#第二幅图像moves到底。你能给我解释一下吗。我在这里是个新手。使用开关盒怎么样?然后你可以用它来代替if idx块,但它可能会变得很长。是的,但idx块的情况怎么样,无论如何,谢谢。解释一下为什么解决方案是这样通常会很有帮助,@dcodesmith。
// Put the target object id as keys and the array of the linked/associated elements as values
var arrs = [
        {'#myImg1': ['#firstImage', '#secondImage']},
        {'#myImg2': ['#secondImage', '#firstImage']},
        {'#myImg3': ['...', '...']} // keep adding new items as object here
    ],
    $windowScrollTop = $(window).scrollTop(); // cache window scroll function

// loop through the array here
$.each(arrs, function (idx, obj) { 
    for (id in obj) {
        var $el = $(id), // cache the target element here
            args = obj[id],
            img1 = args[0].toString(),
            img2 = args[1].toString();

        if ($windowScrollTop >= $el - 150 && $windowScrollTop <= $el + 150) {
            showBgOnTop(img1, img2);
        }

    }

});