Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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 把画布元素带到前面?_Javascript_Jquery_Css_Html_Canvas - Fatal编程技术网

Javascript 把画布元素带到前面?

Javascript 把画布元素带到前面?,javascript,jquery,css,html,canvas,Javascript,Jquery,Css,Html,Canvas,我正试图让多个光标在我的网页上飞来飞去。我让他们工作。我的问题是它们位于HTML5和javscript元素之上。当它们完成后,页面上的其他JQuery动画工作正常,但它将纯白覆盖大部分画布(这是一个大的、交互式的星域)。我怎样才能解决这个问题 如果需要的话,我可以提供一些代码,但是按照我构建代码的方式,它依赖于大量的外部脚本和样式表等,所以可能有点复杂 基本上,我需要在维护部分JQuery动画的同时,将画布放在前面 编辑:我想如果我展示一张显示问题的图片会更有帮助 你可以在底部看到星光场的剩余

我正试图让多个光标在我的网页上飞来飞去。我让他们工作。我的问题是它们位于HTML5和javscript
元素之上。当它们完成后,页面上的其他JQuery动画工作正常,但它将纯白覆盖大部分画布(这是一个大的、交互式的星域)。我怎样才能解决这个问题

如果需要的话,我可以提供一些代码,但是按照我构建代码的方式,它依赖于大量的外部脚本和样式表等,所以可能有点复杂

基本上,我需要在维护部分JQuery动画的同时,将画布放在前面

编辑:我想如果我展示一张显示问题的图片会更有帮助

你可以在底部看到星光场的剩余部分。白色停止和星域开始的位置是光标动画的垂直约束

我想让星域显示在背景上,但在光标下。是否有可能将容器的背景(它是一个
div
元素)设置为带有CSS的脚本,并使用该脚本设置starfield的动画?然后,我将能够最大化容器的大小,并为光标提供全屏显示

另外,不要担心黄色的短吻鳄;它是一个单独的JQuery动画,可以作为背景的一部分

EDIT2:我想我解决了我的问题,但我不知道如何解决它。要在容器中设置光标动画,光标的
位于容器的
中。游标的CSS设置为最高的z索引,但容器的CSS设置为最低的z索引。我怎样才能解决这个问题

同样,如果有必要,我可以提供脚本,但我相信这里最相关的脚本是为光标设置动画的脚本,因此我将在这里介绍:

$(document).ready(function() {
    animateDiv($('.a'));
        animateDiv($('.b'));
        animateDiv($('.c'));

});

function makeNewPosition($container) {

    // Get viewport dimensions (remove the dimension of the div)
    var h = $container.height() - 50;
    var w = $container.width() - 50;

    var nh = Math.floor(Math.random() * h);
    var nw = Math.floor(Math.random() * w);

    return [nh, nw];

}

function animateDiv($target) {
    var newq = makeNewPosition($target.parent());
    var oldq = $target.offset();
    var speed = calcSpeed([oldq.top, oldq.left], newq);

    $target.animate({
        top: newq[0],
        left: newq[1]
    }, speed, function() {
        animateDiv($target);
    });

};

function calcSpeed(prev, next) {

    var x = Math.abs(prev[1] - next[1]);
    var y = Math.abs(prev[0] - next[0]);

    var greatest = x > y ? x : y;

    var speedModifier = 0.25;

    var speed = Math.ceil(greatest / speedModifier);

    return speed;

}
编辑3:

它起作用了!它起作用了

我从容器中取出了其他
元素。我从另一个SO问题中复制了脚本,那里的示例使我相信
必须在容器中。但是,当我把它们放在外面时,一切都完全按照它应该的那样工作。哦,是的

谢谢!
evamvid

使用CSS,您可以使用z-index属性更改元素的层,如下所示

CSS

canvas { 
    position: absolute;
    z-index: 100;
}

请注意,因为你说你使用了很多样式表,你可能需要将z-index增加到999以上,因为很多插件会将其设置为999。此外,要使用z-index属性,元素必须设置position属性

,您可以将CSS z-index属性添加到canvas元素。我可以使用z-index属性操纵其他CSS元素吗?@evamvid:您可以使用它操纵任何DOM元素。但是,必须满足某些条件才能使财产产生任何效力。请参阅。我使用的代码将画布设置为
。示例中给出的CSS是否必须变成
#c{位置:绝对;z-index:100;}
?或者它会保持不变,不管画布id是什么?@Mitch我接受这个,因为它并没有完全解决我的问题,但它让我走上了通往它的道路。经过一点调试,一切都很顺利@米奇莱泽尔再次感谢你让我走上z索引的道路!