zoukankan      html  css  js  c++  java
  • JavaScript实现右键菜单(二)

    BSRightItem

    /**
     * <p>标题: BSRightItem</p>
     * <p>功能描述: 右键菜单项。</p>
     * <p>作者: BinaryStar原创B/S框架</p>
     * <p>版本: 0.1</p>
     * <p>创建日期: 2005-12-21</p>
     */


    function BSRightItem(pid, areaIndex, areaId,  pIndex, index, text, jsfun, img, disabled)...{
      this.pid = pid||"BSRightMenu_1";//BS右键菜单对象ID
      this.areaIndex = areaIndex;//右键块索引
      this.areaId = areaId||"";//BS右键菜单块ID
      this.pIndex = pIndex;//父菜单项索引

      this.level = 0;//树的深度
      this.index = index;//本菜单项索引
      this.id = this.areaId + "_item_" + this.index;//ID
      this.text = text || "BS菜单项";//菜单项文字
      this.jsfun = jsfun;//菜单项js函数
      this.img = img||"";//菜单项图片
      this.childList = new Array();//该菜单项包含的子菜单项
      this.isSperator = false;//是否是分隔符
      this.thisItemIndex = -1;//当前鼠标所在的子菜单项索引。
      this.disabled = disabled || false;//该菜单项是否可用
      this.childIsShow = false;//孩子菜单正在展现
      this.key = "";//右键菜单项的key;
      this.body = null;//该菜单项的对象;
      this.isError = false;//该节点点击出错


      this.setDisabled = function (flag)...{
        if (flag)...{
          this.disabled = true;
        }
        else...{
          this.disabled = false;
        }
      }

      //添加子菜单项
      this.addItem = function (text, jsfun, img, disabled)...{
       var rmObj = eval(this.pid);
     return rmObj.itemAreaList[this.areaIndex].addItem(this.index, text, jsfun, img, disabled);
      }

      //菜单项的展现
      this.show = function()...{
       var rmObj = eval(this.pid);
        var htmlStr = "";
       var pName = rmObj.getRMName(this.level);
        htmlStr += "<tr id=""+this.id+"_tr" style=""+bs_rm_out+""";
        htmlStr += " onmouseover=""+pName+".itemAreaList["+this.areaIndex+"].itemList["+this.index+"].doOnmouseover(event, this)"";
        htmlStr += " onmouseout=""+pName+".itemAreaList["+this.areaIndex+"].itemList["+this.index+"].doOnmouseout(event, this)"";
        if (!this.isSperator && !this.disabled)...{
          htmlStr += " onmouseup=""+pName+".itemAreaList["+this.areaIndex+"].itemList["+this.index+"].doOnmouseup(event, this)"";
          htmlStr += " onmousedown=""+pName+".itemAreaList["+this.areaIndex+"].itemList["+this.index+"].doOnmousedown(event, this)"";
        }
        else...{
          htmlStr += " onmouseup="event.cancelBubble=true;return false;"";
          htmlStr += " onmousedown="event.cancelBubble=true;return false;"";
        }
        htmlStr += " onclick=window.event.cancelBubble=true;return false;";
        htmlStr += ">";
        //图片
        if (!this.isSperator)...{
          htmlStr += "<td align="right" ";
          if (this.img.Trim() != "")...{
            htmlStr += "style="22px;height:22px;";
            htmlStr += "background: url("+rmObj.imagePath+this.img+");";
            htmlStr += "background-repeat: no-repeat;";
            htmlStr += "background-attachment: no-fixed;";
            htmlStr += "background-position: right;"";
            htmlStr += " valign="middle">&nbsp;&nbsp;&nbsp;</td>";
          }
          else...{
            htmlStr += "style="2px;height:22px;";
            htmlStr += " valign="middle">&nbsp;</td>";
          }
          //文字
          var tempText = this.text;
          var isLong = false;
          var cn = 0;
          if (tempText.match(/[^ -~]/g) != null)...{
           cn = tempText.match(/[^ -~]/g).length;
          }

          if ((tempText.length-cn)+cn*2 >= 18)...{
           if (cn <= 3)...{
            tempText = tempText.substring(0, 18)+"...";
           }
           else ...{
            tempText = tempText.substring(0, 10)+"...";
           }
           isLong = true;
          }
          htmlStr += "<td valign="middle" onmouseover="function(){return false;}"";
          if (isLong)...{
           htmlStr += " title=""+this.text+""";
          }
          if (this.disabled)...{
            htmlStr += " style="color:Gray;white-space:nowrap;word-break:word-break ;"";
          }
          htmlStr += "><nobr onmouseover="function(){return false;}">"+tempText+"&nbsp;&nbsp;</nobr></td>";
          //存在孩子时显示箭头。
          htmlStr += "<td style='font-family: webdings;'>";
          if (this.childList.length > 0)...{
            htmlStr += "4";
          }
            htmlStr += "</td>";
        }
        else...{
          //分隔符
          htmlStr += "<td colspan="3" height="5"><hr style=""+bs_rm_sperator+""/></td>";
        }
        htmlStr += "</tr>";
        return htmlStr;
      }

      //设置图片的背景色
      this.setImgSelect = function(elmObj, flag)...{
       //文字背景
       if (!flag)...{
       elmObj.style.cssText = bs_rm_out;
       }
       else if (this.isError)...{
       elmObj.style.cssText = bs_rm_error;
       }
       else ...{
       elmObj.style.cssText = bs_rm_over;
       }
       //图片背景
        if (this.img.Trim() != "")...{
          if (flag)...{
            elmObj.cells[0].style.backgroundColor = "#8989bc";
          }
          else...{
            elmObj.cells[0].style.backgroundColor = "";
          }
        }
      }

      //展现下一级菜单
     this.showChildren = function(event)...{
        var pobj = eval(this.pid);
       var the_obj = event.srcElement.parentElement;
       if (the_obj.tagName == "TD")...{
        the_obj = the_obj.parentElement;
       }
       if (the_obj.id == this.id+"_tr_str")...{
        the_obj = the_obj.parentElement;
       }
        if (this.childList.length > 0 && !this.disabled)...{
          //创建popup
       if (pobj.popupList[this.level+1] == null)...{
        pobj.popupList[this.level+1] = pobj.popupList[this.level].document.parentWindow.createPopup();
        pobj.popupList[this.level+1].document.oncontextmenu = function()...{return false;};
        if (pobj.popupList[this.level+1].document.charset != "GB2312")...{
         try...{
          pobj.popupList[this.level+1].document.charset="GB2312";
         }
         catch(ex)...{
         }
        }
       }
       pobj.popupList[this.level+1].document.body.innerHTML = "";
       pobj.popupList[this.level+1].show(0,0,1,1);

          var htmlStr = "<table border='0' cellspacing='0'>";
          for (var i=0; i<this.childList.length; i++)...{
            htmlStr += pobj.itemAreaList[this.areaIndex].itemList[this.childList[i]].show();
          }
          htmlStr += "</table>";
          var levelObj = null;
          levelObj = pobj.popupList[this.level+1].document.getElementById(this.pid+"_rm_"+(this.level+1));
          //level+1层没有创建
          if (levelObj == null)...{
            levelObj = pobj.popupList[this.level+1].document.createElement("div");
            levelObj.id = this.pid+"_rm_"+(this.level+1);
            levelObj.style.cssText = bs_rm_div;
            pobj.popupList[this.level+1].document.body.appendChild(levelObj);
          }
          htmlStr += "<input type="hidden" id=""+pobj.id+"_selectItem" name=""+pobj.id+"_selectItem" value="-1"/>";
          //alert(htmlStr);
          levelObj.innerHTML = htmlStr;
          levelObj.style.display = "block";
          this.childIsShow = true;
       var width = levelObj.offsetWidth;
       var Height = levelObj.offsetHeight;
          //定位
       var left = GetDefineX(the_obj)+the_obj.offsetWidth;
       var top = GetDefineY(the_obj);
          if(((left+pobj.popupList[this.level].document.parentWindow.screenLeft)+levelObj.offsetWidth) >= window.screen.availWidth)...{
            left -= (the_obj.offsetWidth + levelObj.offsetWidth-4);
          }
          if(((top+pobj.popupList[this.level].document.parentWindow.screenTop)+levelObj.offsetHeight) > window.screen.availHeight)...{
            top -= (levelObj.offsetHeight-the_obj.offsetHeight);
          }
       pobj.popupList[this.level+1].show(left, top, width, Height, pobj.popupList[this.level].document.body);
        }
       else...{
        pobj.hiddenAll(this.level+1);
      }
     }

      //鼠标按下动作
      this.doOnmousedown = function(event, elmObj)...{
        event.cancelBubble=true;
        if (this.childList.length <= 0)...{
          elmObj.setCapture();
        }
        return false;
      }
      //鼠标弹起动作
      this.doOnmouseup = function(event, elmObj)...{
        event.cancelBubble=true;
        if (this.childList.length <= 0)...{
          var pobj = eval(this.pid);
          pobj.setRMIndex(this.areaIndex, this.index);
          elmObj.releaseCapture();
          if (this.jsfun.Trim() != "")...{
            try...{
             eval(this.jsfun);
           this.isError = false;
            }
            catch(e)...{
             var errStr = "*^_^*恭喜你中招了!  "+e.name+":"+e.message+"  节点操作方法 "+this.jsfun+" 发生严重错误!";
           elmObj.style.cssText = bs_rm_error;
           this.isError = true;
           elmObj.title = errStr;
              return;
            }
          }
          pobj.hiddenAll(0);
        }
        return false;
      }
      //鼠标移入动作
      this.doOnmouseover = function(event, elmObj)...{
        event.cancelBubble=true;
        if (!this.isSperator)...{
          this.setImgSelect(elmObj, true);
        }
        //改变其他的项的高选
        var pobj = eval(this.pid);
        if (!pobj.itemAreaList[this.areaIndex].setIndexItem(this.level, this.index))...{
         this.showChildren(event);
        }
       else if (this.childList.length <= 0)...{
         pobj.hiddenAll(this.level+1);
      }
      pobj.setRMIndex(this.areaIndex, this.index);
        return false;
      }

      //鼠标移出动作
      this.doOnmouseout = function(event, elmObj)...{
        event.cancelBubble=true;
        if (!this.isSperator && !this.childIsShow)...{
          this.setImgSelect(elmObj, false);
        }
        return false;
      }
    }

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mynickel2000/archive/2006/09/12/1214623.aspx

     

  • 相关阅读:
    网络测量中基于Sketch方法的简单介绍
    Reading SBAR SDN flow-Based monitoring and Application Recognition
    Reading Meticulous Measurement of Control Packets in SDN
    Reading SketchVisor Robust Network Measurement for Sofeware Packet Processing
    ovs加dpdk在日志中查看更多运行细节的方法
    后缀数组
    (转载)LCA问题的Tarjan算法
    Codeforces Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) A. Checking the Calendar(水题)
    Vijos 1816统计数字(计数排序)
    卡特兰数
  • 原文地址:https://www.cnblogs.com/Godblessyou/p/1779425.html
Copyright © 2011-2022 走看看