javascript - jQuery "slime menu"- 像素完美舍入

标签 javascript jquery css transform rounding

我已经成功地编写了我的 jQuery slime 菜单,现在它工作得很漂亮。我唯一的问题是我分别移动史莱姆的箭头和结束圆(图标),因此如果您将光标移离起点太远,它将无法精确地连接到史莱姆。应该是四舍五入的问题。这是我正在谈论的内容的图像:

enter image description here

这是我正在研究的 fiddle : http://jsfiddle.net/41Lcj653/4/

编辑(工作):http://jsfiddle.net/41Lcj653/7/

谁能帮忙解决这个问题吗?我使用 CSS 转换,并使用 JS 在每个步骤中更新 CSS 规则。

JS部分代码:

$(function(){
    $(window).mousemove(function(e){
        moveslime(e);
    });
});

function moveslime(e){
    var rad  = $('.arrow').height() / 2;
    var ofs  = $('.arrow').offset();
    var mPos = {x: e.pageX-25-rad, y: e.pageY-25-rad};
    var dir  = Math.round( -(Math.atan2(mPos.x, mPos.y)) / (Math.PI/180) );
    $('.arrow').css('transform','rotate('+dir+'deg)');
    $('.arrow').css('border-width','0 25px '+pdist(0, 0, mPos.x, mPos.y)+'px 25px');
    $('.bubble').css('left', mPos.x+'px').css('top', mPos.y+'px');
}

function pdist(x1,y1,x2,y2) {
    return Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2,2));
}

最佳答案

您看到此“未精确连接”的原因是旋转以 360 步为单位(圆的 360 度)。当您靠近中心时,效果可以忽略不计,但是您越远离中心(增加圆的周长!),度数之间的可见差距就会增加。 也许用 svg 试试这个?

实际上你可以使用 float 度数..所以不要四舍五入!

https://jsfiddle.net/41Lcj653/5/

// without math.round
 var dir  = -(Math.atan2(mPos.x, mPos.y)) / (Math.PI/180);

关于javascript - jQuery "slime menu"- 像素完美舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29365741/

相关文章:

javascript - 在动态创建的 HTML 表中调用 PHP 函数

javascript - 编写一个计算词频的小书签

javascript - ajax Jquery后无法获取隐藏字段的值

javascript - Bootstrap-datetimepicker 选择过去几个月

javascript - 将添加/删除类隔离到单击的项目

javascript - 在不发送查询字符串数据的情况下使用 Google Analytics

javascript - js查找url中的字符串

html - 如何在不指定宽度的情况下将 "word-wrap:break-word"用于 div

javascript - 宽度改变功能后宽度不跨越整个 parent 的宽度

html - 使用 CSS 创建缩进 DIV