Javascript 自定义jQuery";“粘液”;菜单,奇怪的功能

Javascript 自定义jQuery";“粘液”;菜单,奇怪的功能,javascript,jquery,math,experimental-design,Javascript,Jquery,Math,Experimental Design,我想创建一个jQuery slime菜单。基本概念很简单。我在屏幕上有一些固定位置的图标。其中一些是“开关”,如果你点击它们,你需要点击另一个元素来产生一些效果(ImageLine类似于当你在RTS中有一座建筑时。仅仅点击建筑的图标是不够的,但你需要在该动作后将其放在地图上) 我想在单击图标之后,在单击另一个“兼容”div之前显示一个CSS三角形元素。问题不在这里,但我对CSS转换不太熟悉 这是我到目前为止所拥有的东西。我的问题是arrow元素没有向光标旋转。我还需要改变它的大小,所以三角形的底

我想创建一个jQuery slime菜单。基本概念很简单。我在屏幕上有一些固定位置的图标。其中一些是“开关”,如果你点击它们,你需要点击另一个元素来产生一些效果(ImageLine类似于当你在RTS中有一座建筑时。仅仅点击建筑的图标是不够的,但你需要在该动作后将其放在地图上)

我想在单击图标之后,在单击另一个“兼容”div之前显示一个CSS三角形元素。问题不在这里,但我对CSS转换不太熟悉

这是我到目前为止所拥有的东西。我的问题是arrow元素没有向光标旋转。我还需要改变它的大小,所以三角形的底部中心必须在指针上

HTML部分很简单(span元素用于调试):

而JS:

$(function(){
    $('.fixicon').click(function(){
        $('.arrow').toggleClass('show');
    });
    $(window).mousemove(function(e){
        if(!$('.arrow').hasClass('show')) {
            return;
        }
        var dir = point_direction(25,25,e.pageX,e.pageY);
        $('.arrow').css('transform','rotate('+dir+'deg)');
        $('span').text(dir);
    });
});

function point_direction(x1,y1,x2,y2) {
    var dx,dy;
    dy = y2 - y1;
    dx = x2 - x1;
    return (Math.atan(dy/dx) * 360) % 360;
}
所以基本上,我需要实现这样的目标,不管屏幕上的光标在哪里:


感谢任何能提供帮助的人。:)

你能解释一下什么是粘液菜单吗?在你的例子中,什么是RTS?Slime菜单只是一个概念的名称,在这里你点击一个div,一个“Slime”(现在只是一个三角形)从中出现。基本上,我希望实现旋转和大小始终跟随光标,如下图所示:。RTS意味着实时策略。>>我很久以前做的事。希望能有帮助,因为我相信这正是你需要的。谢谢,这正是我要找的,但我在谷歌上,甚至在Stackoverflow上都找不到好的来源。现在我可以从本主题的小提琴上复制基础数学了。:)
span {
    float: right;
}
.fixicon {
    width: 30px;
    height: 30px;
    background: #111;
    border-radius: 15px;
    position: fixed;
    left: 10px;
    top: 10px;
}
.arrow {
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 0 25px 200px 25px;
    border-color: transparent transparent #111 transparent;
    opacity: 0;
    position: fixed;
    left: 0;
    top: 25px;
    transform-origin: 25px 0px;
    transform: rotate(0deg);
}
.arrow.show {
    opacity: 1;
}
$(function(){
    $('.fixicon').click(function(){
        $('.arrow').toggleClass('show');
    });
    $(window).mousemove(function(e){
        if(!$('.arrow').hasClass('show')) {
            return;
        }
        var dir = point_direction(25,25,e.pageX,e.pageY);
        $('.arrow').css('transform','rotate('+dir+'deg)');
        $('span').text(dir);
    });
});

function point_direction(x1,y1,x2,y2) {
    var dx,dy;
    dy = y2 - y1;
    dx = x2 - x1;
    return (Math.atan(dy/dx) * 360) % 360;
}