ShortCuts.js
上传用户:voiper
上传日期:2022-05-13
资源大小:260k
文件大小:4k
源码类别:

TreeView控件

开发平台:

C#

  1. /* Acknowledgments: Josh Heyer / David Stone for initial versions. Bradml for stripdown and package */
  2. var keyMapping = [];
  3. keyMapping['37'] = "LEFT";
  4. keyMapping['38'] = "UP";
  5. keyMapping['39'] = "RIGHT";
  6. keyMapping['40'] = "DOWN";
  7. keyMapping['16'] = "SHIFT";
  8. keyMapping['17'] = "CTRL";
  9. var commandMapping = {
  10. Combinations: {
  11. "CTRL+LEFT" : function() {MoveToPost(false, false);},
  12. "CTRL+RIGHT": function() {MoveToPost(true, false);},
  13. "CTRL+UP" : function() {MoveToPost(false, true);},
  14. "CTRL+DOWN" : function() {MoveToPost(true, true);}
  15. }
  16. };
  17. document.onkeydown = function(e) {
  18. return shortcutEventHandler(e, commandMapping, keyMapping);
  19. };
  20. function getControlKeys(e) {
  21. var controls = "";
  22. if (e.ctrlKey)controls += "CTRL+";
  23. if (e.shiftKey)controls += "SHIFT+";
  24. if (e.altKey)controls += "ALT+";
  25. return controls;
  26. }
  27. // return: false == handled, true == keep looking
  28. function shortcutEventHandler(KeyEvent, commandMapping, keyMapping) {
  29. if ( ! KeyEvent)
  30. KeyEvent = event;
  31. //Because IE knows better
  32. var eventKeyValue = (KeyEvent.keyCode) ? KeyEvent.keyCode: KeyEvent.charCode;
  33. var eventKeyName = "";
  34. if (keyMapping[eventKeyValue])
  35. eventKeyName = keyMapping[eventKeyValue];
  36. var controlValue = getControlKeys(KeyEvent);
  37. eventKeyName = controlValue + eventKeyName;
  38. if (commandMapping.Combinations[eventKeyName])  {
  39. commandMapping.Combinations[eventKeyName]();
  40. // Stop propogation if we've found it
  41. if ( KeyEvent.preventDefault )
  42. KeyEvent.preventDefault();
  43. else
  44. KeyEvent.returnValue = false;
  45. if ( KeyEvent.stopPropagation )
  46. KeyEvent.stopPropagation();
  47. else
  48. KeyEvent.cancelBubble = true;
  49. return false;
  50. return true;
  51. }
  52. function MoveToPost(next, thread) {
  53. if (Selected=="" || isNaN(Selected)) return;
  54. var ForumTable = document.getElementById("ForumTable");
  55. if (!ForumTable) return;
  56. var elems = getElementsByClass("MsgHd",ForumTable,"tr");
  57. if (!elems) return;
  58. var moveTo = null;
  59. var selectedId = parseInt(Selected);
  60. var selectedIndex = 0;
  61. var selectedThreadIndex = 0;
  62. for (var i=0; i<elems.length; ++i)  {
  63. var id = elems[i].id.substring(0, elems[i].id.length-3);
  64. id = parseInt(id);
  65. if (IsThreadHead(elems[i]))
  66. selectedThreadIndex = i;
  67. if (id == selectedId) {
  68. selectedIndex = i;
  69. break;
  70. }
  71. }
  72. var nextId = null;
  73. for (var i=selectedIndex + (next ? 1 : -1); i<elems.length && i >= 0; next ? ++i : --i) {
  74. if ((thread && IsThreadHead(elems[i])) || !thread) {
  75. nextId = elems[i].id.substring(0, elems[i].id.length-3);
  76. nextId = parseInt(nextId);
  77. break;
  78. }
  79. }
  80. if (nextId && nextId != parseInt(Selected)) {
  81. SwitchMessage(null,nextId);
  82. EnsureMessageVisible(Selected, true);
  83. }
  84. }
  85. function IsThreadHead(elem) {
  86. return elem.className.indexOf("Rt") >= 0;
  87. }
  88. function EnsureMessageVisible(msgID, bShowTop) {
  89. var msgHeader = document.getElementById(msgID + "_h0");
  90. var msgBody = document.getElementById(msgID + "_h1"); 
  91. if (!msgBody||!msgHeader)return;
  92. // determine scroll position of top and bottom
  93. var scrollContainer = document.body;
  94. var top = getRealPos(msgHeader, 'Top');
  95. var bottom = getRealPos(msgBody, 'Top') + msgBody.offsetHeight; 
  96. // if not already visible, scroll to make it so
  97. if ( scrollContainer.scrollTop > top && !bShowTop)
  98. scrollContainer.scrollTop = top - document.body.clientHeight/10;
  99. if ( scrollContainer.scrollTop+scrollContainer.clientHeight < bottom)
  100. scrollContainer.scrollTop = bottom-scrollContainer.clientHeight;
  101. if ( scrollContainer.scrollTop > top && bShowTop)
  102. scrollContainer.scrollTop = top - document.body.clientHeight/10;
  103. function getRealPos(i,which) {
  104. iPos = 0
  105. while (i!=null)  {
  106. iPos += i["offset" + which];
  107. i = i.offsetParent;
  108. }
  109. return iPos
  110. }
  111. function getElementsByClass(className,node,tag) {
  112.   var found = new Array();
  113.   if (node == null)node = document;
  114.   if (tag == null)tag = '*';
  115.   var elms = node.getElementsByTagName(tag);
  116.   var length = elms.length;
  117.   var pattern = new RegExp("(^|\s)"+className+"(\s|$)");
  118.   for (i=0, j=0; i<length; i++) {
  119.  if (pattern.test(elms[i].className) ) {
  120. found[j] = elms[i];
  121. j++;
  122.  }
  123.   }
  124.   return found;
  125. }