2014年3月27日木曜日

JavaScript ボタンの押しっぱなしを検出する。


<html>
<head>
<script>
window.onload = function(){
var sts = 0;
i = function(id){ return document.getElementById(id) };
/// これが押し始め
i('o').onmousedown = function(){i('o').innerHTML='[down]';
                                i('s').innerHTML='STS=1';
                                sts=1; }
//// ここで押し終わり
i('o').onmouseup = function(){ i('o').innerHTML='[up]';
                                i('s').innerHTML='STS=0';
                                sts=0;}
//// ボタンからマウスが押されたまま放れるとUPが通知されないので、ここで押し終わりとして、内部ではキャンセルする。
i('o').onmouseout = function(){ i('o').innerHTML='[up]';
                                if (sts == 1)
                                {
                                    i('s').innerHTML='STS=-1';
                                     sts=-1;
                                }
                             }
}
</script>
<button id="o">[up]</button>
<p>
<div id="s">STS=0</div>
</p>
</body>
</html>

画面の [UP]をクリックすると、DOWNに変わり、DOWNから抜けるとUPになる。もちろん、クリックを放すとUPになる。STSは状況表示で、0は初期または正常終了状態、1は押されている状態、-1は押されたままマウスが離れた場合。
setCaptureを使わない。IEはバージョン毎のコンパチ性が全くない。chromeに期待する。どんな良いものでも、コンパチ性が無ければ意味がない。せめてダウングレード状態を宣言できるようにしなければ、ブラウザとしての価値が疑われる。次期バージョンはどうなるのか。WindowsUpdateで勝手に更新されるし。そもそも、WindowsのOSがIEのモジュールを使っていること自体に問題がある。IEのバージョンによりOSの動作が変わるなんてことは本末転倒である。

(2015/12/17)追記
 OSがIEのモジュールを使っている==>ファイルエクスプローラ(OSのシェル)がIEのモジュールを使っているという意味。Windowsはシェルの変更ができないので、ファイルエクスプローラはOSの一部だという認識。