10

假设我们有如下简单的 jQuery 代码:

var $document = $(document);
$document.ready(function() {
    var $test = $("#test");
    $document.keydown(function(e) {
        e.shiftKey && $test.css("cursor", "pointer");
    });
});

#test问题是如果鼠标指针移到块上,WebKit 不会改变块鼠标光标#test,然后按下 Shift 键。但是,只要您移动光标,Chrome 和 Safari 就会将光标样式更改为pointer- 完全符合预期,但不会移动鼠标。这个bug(?)和火狐无关,在Internet Explorer和Opera下我也没查...

那么,有没有人遇到过同样的麻烦呢?也许,有解决方法吗?

提前致谢。

4

4 回答 4

9

这是当时 webkit 引擎中的一个众所周知的错误,并且没有真正的解决方法。

于 2011-01-12T13:36:46.970 回答
1

与之前所说的相反,我从 David Becker 那里找到的这种解决方法似乎很有效。(浏览器的修复程序正在处理中。请参阅https://bugs.webkit.org/show_bug.cgi?id=101857

function _repaintCursor() {
    var saveCursor = document.body.style.cursor,
        newCursor = saveCursor ? "" : "wait";
    _setCursor(newCursor);
    _setCursor(saveCursor);
}

function _setCursor(cursor) {
    var wkch = document.createElement("div");
    var wkch2 = document.createElement("div");
    wkch.style.overflow = "hidden";
    wkch.style.position = "absolute";
    wkch.style.left = "0px";
    wkch.style.top = "0px";
    wkch.style.width = "100%";
    wkch.style.height = "100%";
    wkch2.style.width = "200%";
    wkch2.style.height = "200%";
    wkch.appendChild(wkch2);
    document.body.appendChild(wkch);
    document.body.style.cursor = cursor;
    wkch.scrollLeft = 1;
    wkch.scrollLeft = 0;
    document.body.removeChild(wkch);
}
于 2013-04-09T23:12:35.237 回答
1

我在使用 Chromium 11.0.696.65 时遇到了这个问题。我能够用一点延迟的 JavaScript 来解决它。

我试图制作一个由大型 LCD 显示器组成的电子标牌,该显示器由一台在 Ubuntu 上运行 Chromium 的小型无盘工业计算机驱动。在启动时,它运行如下:

chromium-browser --kiosk 'http://server:4662/1920x1080/status.html?id=42'

下载的页面有一个 XHR 轮询循环,每当与 相关的任何更改时,它都会接收一个 JavaScript 对象文字id=42,此时,它会适当地更新显示。有 CSS 指定所有元素都应该有一个空白的鼠标指针。

问题是,Chrome 的请求中鼠标指针留在了屏幕上。我一移动鼠标,它就消失了。然而,真正的标志不会附加鼠标,更不用说用户移动它了。

我添加了以下脚本:

function $(id) {return document.getElementById(id);}

function onLoad()
{
    window.setTimeout(hideCursor, 1000);

    function hideCursor() {
        $('content').style.cursor = 'url(/blankCursor.gif),auto';
    }
}

window.onload = onLoad;

现在,烦人的光标在启动时会短暂显示,但会在一秒钟内消失。然后标志无光标运行,直到下一次启动(几天或几周)。

顺便说一句,这,auto似乎是另一个 Chromium 错误。我发现如果我只是放url(/blankCursor.gif),它不会兑现声明。

于 2011-05-12T02:06:23.580 回答
0

我找到了解决该问题的方法。

如果您强制浏览器重排,光标似乎会更改。因此,如果您将光标设置为打开elem然后调用elem.scrollTop(或任何数量的触发重排的属性),则光标将更新到位。

因此,在您的情况下,代码最终将是:

var $document = $(document);
$document.ready(function() {
    var $test = $("#test");
    $document.keydown(function(e) {
        e.shiftKey && $test.css("cursor", "pointer");
        $test[0].scrollTop;
    });
});
于 2017-11-01T13:02:37.320 回答