绝对元素粒子重叠其他元素问题

时间:2014-11-13 14:43:33

标签: javascript z-index particles

我将这个漂亮的粒子脚本放在我的页面中以获得有趣的外观,并且还可以使用更复杂的JS,但是我发现我制作得更大的一些像看起来像散景图片的粒子漂浮在图像链接上,导致它们是不可点击的,虽然不是一个大问题可能很烦人。

我想知道如何修改此脚本以使粒子位于图像按钮链接的后面。除了在显示粒子部分中的脚本应用它的一个部分之外没有css。

在旁注中,我尝试给出图像并链接一个10000的z索引,看看是否有帮助,但仍然没有。

<script type="text/javascript">
  function Particle() {
   this.path = '../static/images/';
   this.images = ['particle1.png', 'particle2.png', 'particle3.png', 'particle4.png'];

//  Randomly Pick a Particle Model
   this.image = this.images[randomInt(this.images.length)];
   this.file = this.path + this.image;

//  Create a Particle DOM
   this.element = document.createElement('img');

   this.speed().newPoint().display().newPoint().fly();};

    //  Generate Random Speed
   Particle.prototype.speed = function() {
   this.duration = (randomInt(10) + 5) * 1100;

   return this;
};

//  Generate a Random Position
   Particle.prototype.newPoint = function() {
     this.pointX = randomInt(window.innerWidth - 100);
     this.pointY = randomInt(window.innerHeight - 100);

return this;
};

    //  Display the Particle
Particle.prototype.display = function() {
   $(this.element)
    .attr('src', this.file)
    .css('position', 'absolute')
    .css('top', this.pointY)
    .css('left', this.pointX);
   $(document.body).append(this.element);

return this;
   };

//  Animate Particle Movements
Particle.prototype.fly = function() {
var self = this;
$(this.element).animate({
    "top": this.pointY,
    "left": this.pointX,
}, this.duration, 'linear', function(){
    self.speed().newPoint().fly();
});
};

function randomInt(max) {
//  Generate a random integer (0 <= randomInt < max)
   return Math.floor(Math.random() * max);
}

$(function(){
var total = 30;
var particles = [];

for (i = 0; i < total; i++){
    particles[i] = new Particle();
}
});
</script>

1 个答案:

答案 0 :(得分:1)

使用.prepend(而不是.append

$(document.body).prepend( this.element );

这样,由于自然的Z阶DOM优先级,您的绝对粒子将位于其他定位的页面元素下面。

从上面您可以理解,您还需要将position 添加到主页面包装,以便完成这项工作:

http://jsbin.com/cizut/1/edit?html,css,js,output


结论:

#mainPageWrapper{
  position:relative;
  /* .....other styles */
}

$(document.body).prepend( this.element );