【问题标题】:JQuery/GSAP - Moving multiple elements parallel to each otherJQuery/GSAP - 相互平行移动多个元素
【发布时间】:2015-07-25 19:06:48
【问题描述】:

我想做的是:我想在页面的 YX 轴(底部和左侧边框)上生成框并让它们移动彼此平行,直到它们离开屏幕,我想删除它们。 这是我到目前为止所做的:

Codepen.

function generate(){
  var $element = $("<div>", {class: "box"});
  //Generate random x and y coordinates
  var posy = (Math.random() * ($('body').height() - $element.width())).toFixed();
  var posx = (Math.random() * ($('body').width() - $element.height())).toFixed();
  //Place the box on the x or y axis
  var rand = Math.floor(Math.random()*2);
  if(rand==0)
  {
    posx=0;
  }else{
    posy=0;
  }

  $element.css(
  {'position':'absolute',
  'right':posx+'px',
  'bottom':posy+'px'});
  $("body").append($element);

  //Move box diagonally, all the boxes paths are parallel
    TweenLite.to($element, 2, {top:0, right:0, ease:Power2.easeOut});

  //Delete boxes offscreen
  var $boxes=$(".box");
  /*$boxes.each(function(){
    if($(this).position().left >1300){
      $(this).remove();
    }
  });*/
}

我的问题是:我如何准确地找到动画盒子的正确点,以使所有盒子彼此平行移动? 另外,有没有办法不使用外部插件来查找元素是否超出了页面范围? 感谢您的任何回答!

编辑: 这是一张图,可以更好地解释我自己。对不起我糟糕的绘画技巧!

现在所有的盒子都汇聚到同一个 top:0right:0 点,但我想让它们彼此平行,因此,每个盒子都应该有一个不同的顶部/右侧点去。我猜我的问题是计算它,但我该怎么做呢?这也影响了我的屏幕外问题。

【问题讨论】:

  • 我不确定我是否正确理解了您所说的相互平行移动的部分?我假设这工作得很好。您只是难以将它们移出 屏幕边界的 右上角 角附近的某个位置吗?这是你要找的吗?
  • 我添加了一张图来更好地解释自己。
  • 抱歉,刚刚添加!
  • 我的回答有帮助吗?这是你要找的还是我完全错过了重点?

标签: javascript jquery gsap


【解决方案1】:

this是你想要创造的那种效果吗?

JavaScript:

function generate(){
  var windowHeight = $(window).height();
  var windowWidth = $(window).width();
  var $element = $('<div>', {class: 'box'});
  var initX = parseInt(Math.random() * windowWidth) - (windowWidth * 0.5);
  var destX = parseInt(initX) + $(window).height();

  $('body').append($element);
  TweenLite.fromTo($element, 2, {x:initX, y:0}, {x:destX, y:-windowHeight, ease:Power2.easeOut, onComplete: onCompleteAnimation, onCompleteParams: [$element]});
}

function onCompleteAnimation($element) {
  $element.remove();
}

您会注意到,我没有像您之前那样使用position: absolute;topleft(或right)属性设置动画。相反,我正在为xy 设置动画,它们本质上是translate(x, y) 值。这使动画看起来很流畅:Link

希望这会有所帮助。

【讨论】:

  • 非常感谢,这正是我想做的!不过让我问你一件事:- (windowWidth * 0.5) 是做什么的,计算起始 x 位置?
  • 由于一切都在沿对角线路径移动,因此减去几个像素是有意义的,这样框在最终到达目标值时会覆盖大部分视觉空间。这个- (windowWidth * 0.5) 部分有助于将destX 的位置保持在稍微靠近屏幕中心的位置。尝试完全删除它并使用它来了解它的作用。从本质上讲,initXparseInt(Math.random() * windowWidth) 应该足够了,但 减去 几个像素会有所帮助。
猜你喜欢
  • 2022-11-09
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 2013-07-09
  • 1970-01-01
  • 2021-04-19
相关资源
最近更新 更多