Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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,以下函数使用options参数(切换)使用jQuery滑动元素: // options slideRight: { direction: 'right', startValue: '0', endValue: '100px' }, // function function(slide) { const $el = $(this.el) $el.click(() => { if ($el.parent().css(slide.direction) === sli

以下函数使用
options
参数(切换)使用jQuery滑动元素:

// options
slideRight: {
  direction: 'right',
  startValue: '0',
  endValue: '100px'
},

// function
function(slide) {
  const $el = $(this.el)
  $el.click(() => {
    if ($el.parent().css(slide.direction) === slide.startValue) {
      $el.parent().animate({
        [slide.direction]: slide.endValue
      }, 200)
    } else {
      $el.parent().animate({
        [slide.direction]: slide.startValue
      }, 200)
    }
  })
}
我想添加第四个选项,名为
mirror
,它将使另一个元素镜像运动

但是对于这个,我需要相对于元素的当前位置移动元素。我怎样才能做到这一点


(注意:元素的
位置设置为
固定

将参数传递给
.animate()
时,可以设置
右侧:“-=50px”
以将元素50px滑动到其当前
右侧
值的右侧

类似这样的操作将相对其当前位置移动相同数量的两个元素:

function slide(startValue, endValue) {
    var change = endValue-startValue;
    $("#one").animate({right:"-="+change+"px"}, 200);
    $("#two").animate({right:"-="+change+"px"}, 200)  
}

slide(0,50)
这是一把小提琴:


这就是您想要的吗?

将参数传递给
.animate()
时,您可以将
设置为right:“-=50px”
以将元素50px滑动到其当前
right
值的右侧

类似这样的操作将相对其当前位置移动相同数量的两个元素:

function slide(startValue, endValue) {
    var change = endValue-startValue;
    $("#one").animate({right:"-="+change+"px"}, 200);
    $("#two").animate({right:"-="+change+"px"}, 200)  
}

slide(0,50)
这是一把小提琴:


这就是您要找的吗?

检查这是否可行。我添加了第四个选项
mirror
,然后为它提供了与第一个元素相同的动画。不确定句柄是否正确,因为我没有完整的标记

// options
slideRight: {
  direction: 'right',
  startValue: '0',
  endValue: '100px',
  mirror: '#mirrorElement'
},

// function
function(slide) {
  const $el = $(this.el)
  $el.click(() => {
    if ($el.parent().css(slide.direction) === slide.startValue) {
      $el.parent().animate({
        [slide.direction]: slide.endValue
      }, 200);
      $(slide.mirror).animate({
        [slide.direction]: slide.endValue
      }, 200);
    } else {
      $el.parent().animate({
        [slide.direction]: slide.startValue
      }, 200)
      $(slide.mirror).animate({
        [slide.direction]: slide.startValue
      }, 200);
    }
  })
}

检查这是否可行。我添加了第四个选项
mirror
,然后为它提供了与第一个元素相同的动画。不确定句柄是否正确,因为我没有完整的标记

// options
slideRight: {
  direction: 'right',
  startValue: '0',
  endValue: '100px',
  mirror: '#mirrorElement'
},

// function
function(slide) {
  const $el = $(this.el)
  $el.click(() => {
    if ($el.parent().css(slide.direction) === slide.startValue) {
      $el.parent().animate({
        [slide.direction]: slide.endValue
      }, 200);
      $(slide.mirror).animate({
        [slide.direction]: slide.endValue
      }, 200);
    } else {
      $el.parent().animate({
        [slide.direction]: slide.startValue
      }, 200)
      $(slide.mirror).animate({
        [slide.direction]: slide.startValue
      }, 200);
    }
  })
}

我的答案与目前发布的有点不同,但应该作为你想要什么的起点。我使用了
transform
来进行相对定位,因为如果您已经使用
左上方的
定位了一个元素,
transform:translate
将相对于其固定的当前位置移动项目。我认为动画转换还有一个额外的性能优势。我会调查的

根据(我相信是不正确的)假设稍微修改了代码,以便在演示中工作:

const someObject = {    

    // function
    slide: function (slide) {
      const $el = $(slide.el)
      $el.click(() => {
        if (slide.slideRight.direction === 'right') {

            $el.parent().animate({transform: 'translateX(' + slide.slideRight.endValue + 'px)'}, {
                duration: 200,
                step: function (now, fn) {
                    fn.start = $el.hasClass('in') ? slide.slideRight.endValue : slide.slideRight.startValue;
                    fn.end = $el.hasClass('in') ? slide.slideRight.startValue : slide.slideRight.endValue;
                    $el.parent().css({transform: 'translateX(' + now + 'px)'});

                    if (now === fn.end) {
                        $el.toggleClass('in');
                    }
                }
            })

        } else {
          // other stuff
        }
      })
    }

}

someObject.slide({
    el: '.position-me',
    slideRight: {
        direction: 'right',
        startValue: 0,
        endValue: 100,
        mirror: '.position-me-parent-mirror'
    }
})

我的答案与目前发布的答案略有不同,但应该作为你想要的答案的起点。我使用了
transform
来进行相对定位,因为如果您已经使用
左上方的
定位了一个元素,
transform:translate
将相对于其固定的当前位置移动项目。我认为动画转换还有一个额外的性能优势。我会调查的

根据(我相信是不正确的)假设稍微修改了代码,以便在演示中工作:

const someObject = {    

    // function
    slide: function (slide) {
      const $el = $(slide.el)
      $el.click(() => {
        if (slide.slideRight.direction === 'right') {

            $el.parent().animate({transform: 'translateX(' + slide.slideRight.endValue + 'px)'}, {
                duration: 200,
                step: function (now, fn) {
                    fn.start = $el.hasClass('in') ? slide.slideRight.endValue : slide.slideRight.startValue;
                    fn.end = $el.hasClass('in') ? slide.slideRight.startValue : slide.slideRight.endValue;
                    $el.parent().css({transform: 'translateX(' + now + 'px)'});

                    if (now === fn.end) {
                        $el.toggleClass('in');
                    }
                }
            })

        } else {
          // other stuff
        }
      })
    }

}

someObject.slide({
    el: '.position-me',
    slideRight: {
        direction: 'right',
        startValue: 0,
        endValue: 100,
        mirror: '.position-me-parent-mirror'
    }
})