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予想どおりに変更しますが、マウスを移動する必要はありません。このバグ(?)はFirefoxとは関係がなく、InternetExplorerとOperaで確認していません...

それで、誰かが同じ問題を経験したことがありますか?おそらく、その回避策はありますか?

前もって感謝します。

4

4 に答える 4

9

これは当時のWebkitエンジンでよく知られているバグであり、実際の回避策はありません。

于 2011-01-12T13:36:46.970 に答える
1

Chromium11.0.696.65を使用してこの問題が発生しました。少し遅れたJavaScriptで解決できました。

私は、UbuntuでChromiumを実行している小さなディスクレス産業用コンピューターによって駆動される大きなLCDモニターで構成される電子サインを作成しようとしていました。起動時に、次のように実行されます。

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 に答える
1

以前に言われたことに反して、私がデビッドベッカーから見つけたこの回避策は効果的であるようです。(ブラウザの修正はパイプにあります。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 に答える
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 に答える