| デベロッパー | 2006年12月5日 10:20 |
|
Webページ上の状況依存ヘルプの自動作成 著者: Scott Mitchell オリジナル版を読む ▼2006年12月5日 10:20 付の記事 ■海外internet.com発の記事 はじめに前回の記事『Webページ上に状況依存ヘルプを作成する』では、ブラウザの特定の領域にリッチテキストのヘルプツールヒントを関連付けるにはどうすればよいかを考察しました。特定のイメージやテキストの上にマウスポインタを置いたときに、クライアントサイドの簡単なJavaScriptとHTMLマークアップによって、画像やリッチテキストを含むヘルプウィンドウが表示されるようにしたわけです。このような状況依存ヘルプには、Webページに追加的な情報を表示する場合やWebページ上のデータをさらに詳しく説明する場合に、表示スペースを節約できるメリットがあります。 前回の記事は、状況依存ヘルプシステムの基礎作りに重点を置いていたため、いくつか足りない点がありました。すぐ気付くのは、マウスが状況依存領域を横切るとすぐにヘルプウィンドウが表示され、状況依存領域を離れるとすぐに消えることです。この動作は操作性の面で2つの問題を引き起こします。第一の問題は、画面上を移動するマウスがたまたまヘルプ領域を通過しただけでヘルプウィンドウが表示され、目障りになることです。第二の問題は、ヘルプウィンドウ内にリンクが含まれている場合や長いテキストのためにスクロールが必要な場合に、ヘルプ領域の外にマウスを移動するとヘルプウィンドウが消えてしまうことです。 この状況依存ヘルプシステムには、こうした操作性の問題の他に、ページ開発者にとってそれほどユーザーフレンドリでないという問題もあります。すべてのスクリプトと この記事では、前回紹介した初歩的な状況依存ヘルプシステムの改良方法を考えます。まず前述の操作性の問題を解決し、次にASP.NET 2.0のクラスを作成します。このクラスのメソッドを使って、特定のヘルプ領域のヘルプウィンドウと必要なスクリプトを追加しようというわけです。では、本題に入りましょう! 前回の記事『Webページ上に状況依存ヘルプを作成する』をまだお読みでない方は、そちらから先に読むことをお勧めします。 ヘルプウィンドウの開閉がすぐに行われないようにする一般的なWebページやWindowsアプリケーションでは、ツールヒント対応のインターフェイス領域上をマウスが通過しただけではツールヒントは表示されず、マウスをその領域で一呼吸止めたときに初めて表示されるようになっています。しかし、先週の記事で紹介した状況依存ヘルプシステムでは、マウスがヘルプ領域を横切るとヘルプウィンドウが直ちに表示されます。この過敏な動作は、ブラウザ画面上でマウスを移動するときに目障りな印象を与えます。状況依存ヘルプを表示するつもりがなくてもマウスを画面上で動かすとヘルプ領域をいくつか通過してヘルプウィンドウが表示されてしまうからです。これらのヘルプウィンドウは、画面上でそのままマウスを動かせば消えますが、ヘルプウィンドウがパッと現れてすぐ消えるとユーザーが混乱するばかりでなく、ユーザーに不快な思いをさせる可能性があります。 この問題を改善するには、少し猶予時間を置いてからウィンドウを表示するようにします。つまり、ヘルプ領域上にマウスが来てもヘルプウィンドウを直ちに表示せず、半秒ほど待ってからヘルプウィンドウを表示します。半秒の待ち時間以内にマウスがヘルプ領域を出た場合はヘルプウィンドウを表示しません。 JavaScriptの そこでこの待機機能を実現するために、前回の記事でヘルプウィンドウを表示するのに使っていた
以前と同じ入力パラメータセットに加え、新たなパラメータ
waitDurationInMillisecondsを受け取ります。waitDurationInMillisecondsパラメータには、マウスがヘルプ領域に入ってからヘルプウィンドウを表示するまでの時間をミリ秒単位で指定します。この関数はsetTimeout関数を用いてcsi_showHelpFloatWindowInternalを呼び出します。ヘルプウィンドウを表示する実際の処理を実行します。
その他に、ウィンドウの表示をキャンセルするかどうかを指示するフラグ変数が必要です。例えば、マウスがヘルプ領域に入ったときは、 そこで、オープンコマンドがキャンセルされたかどうかを示すフラグ変数を使うことにします。この変数は // Array to hold the ’flags’ to determine // whether a window’s open has been cancelled var csi_cancelOpenArray = new Array(); function csi_showHelpFloatWindow(windowID, objID, horizPadding, vertPadding, goRight, waitDurationInMilliseconds) { // keep the window open csi_cancelOpenArray[windowID] = false; setTimeout("csi_showHelpFloatWindowInternal(’" + windowID + "’,’" + objID + "’," + horizPadding + "," + vertPadding + "," + goRight + ");", waitDurationInMilliseconds); } function csi_showHelpFloatWindowInternal(windowID, objID, horizPadding, vertPadding, goRight) { // exit function immediately if open command has been cancelled if (csi_cancelOpenArray[windowID] == true) return; ... Same logic for displaying the help window as seen in last week’s article ... } マウスがヘルプ領域の外に出たら、フラグ( function csi_hideHelpFloatWindow(windowID) { // cancel the open csi_cancelOpenArray[windowID] = true; ... } 同様にして、ヘルプウィンドウを開いたヘルプ領域からマウスが出てからヘルプウィンドウを閉じるまでの猶予時間を追加します。この猶予時間を設けることで、ユーザーはマウスをヘルプ領域からヘルプウィンドウへ移動し、そこでヘルプウィンドウの操作(スクロールやハイパーリンクのクリックなど)を行えるようになります。これを実現するために別のフラグ配列(
新たな入力パラメータ
waitDurationInMillisecondsを受け取ります。このパラメータには、マウスがヘルプ領域を出てからヘルプウィンドウを隠すまでの猶予時間をミリ秒単位で指定します。この関数はsetTimeout関数を使用してcsi_hideHelpFloatWindowInternalを呼び出します。ヘルプウィンドウを隠す実際の処理を実行します。
// Array to hold the ’flags’ to determine // whether a window’s close has been cancelled var csi_cancelCloseArray = new Array(); function csi_hideHelpFloatWindow(windowID, waitDurationInMilliseconds) { // cancel the open csi_cancelOpenArray[windowID] = true; // wait before hiding window csi_cancelCloseArray[windowID] = false; setTimeout("csi_hideHelpFloatWindowInternal(’" + windowID + "’);", waitDurationInMilliseconds); } function csi_hideHelpFloatWindowInternal(windowID) { // exit function immediately if close command has been cancelled if (csi_cancelCloseArray[windowID] == true) return; ... Same logic for hiding the help window as seen in last week’s article ... } また、 状況依存ヘルプを自動的に追加する特定の領域にヘルプウィンドウを関連付けるには、以下のクライアントサイドタスクを作成する必要があります。
状況依存ヘルプを必要とする各ページにこれらの要素を手動で追加するのは手間がかかりますし、間違いのもとです。そのような方法によらず、ASP.NETページの分離コードクラスの1行のコードで画面上の領域とヘルプウィンドウを関連付けることができれば理想的です。そうすれば、メソッドを1回呼び出すだけで、必要なJavaScript、CSS、そしてヘルプウィンドウのマークアップが自動的に挿入されるからです。 これを実装するために、状況依存ヘルプ関連メソッドを含む
オプションで、ヘルプウィンドウの表示位置(ヘルプ領域の右または左側)、ウィンドウの幅と高さ、ヘルプ領域とヘルプウィンドウの間の左右および上限の余白、ヘルプウィンドウ開閉時の猶予時間(ミリ秒)に関する入力パラメータも指定できます。 例えば、 AddContextSensitiveHelp(WelcomeLabel, "GeneralHelp", "~/HelpFiles/GeneralHelp.aspx") ContextSensitiveHelpとASP.NET Version 1.x ContextSensitiveHelpクラスの開発にはVisual Studio 2005を使用しました。このクラスはASP.NET 2.0のWebアプリケーションで使うことを想定しています。クライアントサイドスクリプトの発行に関して.NET Framework 2.0で新たに登場したクラスやメソッドを使用しているので、そのままだとASP.NET 1.xアプリケーションでは正常に動作しません。しかし、2.0の新しいスクリプト機能も少し修正すれば1.xで実現できます。ASP.NET 1.xアプリケーションでクライアントサイドスクリプトを自動的に操作する方法については、『Working with Client-Side Script』を参照してください。まとめと次のステップ 今回は、以前の記事『Webページ上に状況依存ヘルプを作成する』で紹介した状況依存ヘルプシステムに大幅な改良を加えました。JavaScriptの しかし、この状況依存ヘルプシステムには、まだ足りない点があります。例えば、ヘルプウィンドウの高さと幅を明示的に指定する必要があり、ウィンドウサイズが実際の内容に応じて変化しません。そのため、ヘルプウィンドウのサイズが400x350なのに内容がたった数ワードといったことが起こります。ウィンドウ内の空白部分を切り詰めてヘルプウィンドウのサイズを200x150というように自動的に調整する機能があれば理想的です。また、ヘルプ領域がブラウザの右端または下端近くにあるときに、ヘルプウィンドウがブラウザの右端または下端で切れてしまうようです。右端で切れそうなら左へ、下端で切れそうなら上へとウィンドウの位置を自動的にずらす機能があるとよいと思います。これらの問題は、多分今後の記事で扱うことになるでしょう。 それでは、ハッピープログラミング! 著者紹介Scott Mitchell(Scott Mitchell)
|