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