jQuery 鼠标移动停止

发布于 2024-10-17 10:59:39 字数 1840 浏览 4 评论 0原文

Felix 的英文翻译:

我想创建一个跟随鼠标光标的菜单,如果光标距它一定距离,它就会停止移动。到目前为止我的解决方案: 我创建了两个嵌套的 div。内部 div 包含菜单。外部 div 用于停止菜单。如果光标移动到外部 div 上,则只要光标悬停在内部 div 上,内部 div 就应该停止并停留。 *编辑:菜单应该轻柔但快速地停止。

德语原文:

ich möchte ein Menü erstellen welches meinen Mauszeiger verfolt und in bestimmter nähe stehen bleibt。 Mein Lösungsansatz ist folgender: Ich baue 2 ineinander verschachtelte DIV。我的内部 DIV ist das Menü vorhanden。 Das äußere Div ist zum stoppen da。另外,我们还可以在 das äußere Div gehe soll das insidee DIV stark abbremsen und stehen bleiben、solange ich drin bin 中使用 Mauszeiger。

Hier mein derzeitiger 代码(固件:jQuery):

var div = jQuery("<div id='menubox'><div id='innerdiv'>&nbsp;</div></div>").appendTo("body");

    var mouseX = 300, mouseY = 300;
    jQuery(document).mousemove(function (el) {
        if (onMenu == false) {
            mouseX = el.pageX;
            mouseY = el.pageY;
        }
    });

    jQuery('#menubox').mouseenter(function (el) {
        onMenu = true;
        stopMoving();
    }).mouseleave(function (el) {
        onMenu = false;
        startMoving();
    });

    var xp = 0, yp = 0;
    function stopMoving() {
        clearTimeout(timer);
        timer = setTimeout(function () {
            clearInterval(loop);
        }, 100);
    }
    function startMoving() {
        clearTimeout(timer);
        clearInterval(loop);
        loop = setInterval(function () {
            xp += (mouseX - xp) / 20;
            yp += (mouseY - yp) / 20;
            jQuery('#menubox').css({ left: xp, top: yp });
        }, 40);
    }
    startMoving(); // StartMoving on Page Load

*编辑:我有一个 IE Bug。我必须在外部 div 放置一个透明的 gif。现在这个功能已经可以了。如果我在外部或内部 div 中,div 不会移动,但不会很快停止。它应该非常轻柔、快速地停止,并且不要移动,即 200px,然后使用clearIntervall() 停止或硬停止。我应该再做一个计时器吗?

English translation by Felix:

I want to create a menu which follows the mouse cursor and stops moving if the cursor is in a certain distance to it. My solution so far:
I created two nested divs. In inner div contains the menu. The outer div is for stopping the menu. If the cursor moves over the outer div, the inner div should stop and stay as long as cursor hovers over it. *EDIT: And the menu should stop softly but quickly.

Original German:

ich möchte ein Menü erstellen welches meinen Mauszeiger verfolgt und in bestimmter nähe stehen bleibt. Mein Lösungsansatz ist folgender:
Ich baue 2 ineinander verschachtelte DIVs. Im inneren DIV ist das Menü vorhanden. Das äußere Div ist zum stoppen da. Also wenn ich mit dem Mauszeiger in das äußere Div gehe soll das innere DIV stark abbremsen und stehen bleiben, solange ich drin bin.

Hier mein derzeitiger Code (fw's: jQuery):

var div = jQuery("<div id='menubox'><div id='innerdiv'> </div></div>").appendTo("body");

    var mouseX = 300, mouseY = 300;
    jQuery(document).mousemove(function (el) {
        if (onMenu == false) {
            mouseX = el.pageX;
            mouseY = el.pageY;
        }
    });

    jQuery('#menubox').mouseenter(function (el) {
        onMenu = true;
        stopMoving();
    }).mouseleave(function (el) {
        onMenu = false;
        startMoving();
    });

    var xp = 0, yp = 0;
    function stopMoving() {
        clearTimeout(timer);
        timer = setTimeout(function () {
            clearInterval(loop);
        }, 100);
    }
    function startMoving() {
        clearTimeout(timer);
        clearInterval(loop);
        loop = setInterval(function () {
            xp += (mouseX - xp) / 20;
            yp += (mouseY - yp) / 20;
            jQuery('#menubox').css({ left: xp, top: yp });
        }, 40);
    }
    startMoving(); // StartMoving on Page Load

*EDIT: I had an IE Bug. I had to place a transparent gif at outer div. Now this function is ok. If im in the outer or inner div, the div dont move, but it dont stop quickly. It should stop very soft and quick and dont move i.e. 200px and than stops or stops hard with clearIntervall(). Should i make one more timer?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文