当前位置: 首页 >> 程序设计 >> 五星展开菜单显示效果
 

五星展开菜单显示效果

作者:      来源:http://blog.csdn.net/hinavy     发表时间:2007-02-12     浏览次数:      字号:    

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>网页特效观止|JsCode.CN|---非常酷的五星展开菜单显示效果</title>

</head>

<body>
<style type="text/css">
.dot         
{ position: absolute; width: 6; height: 6; visibility: hidden; background-color: red; font-size: 1px; cursor: pointer; cursor: hand; z-index: 100 }
.dotoff      
{ position: absolute; width: 6; height: 6; visibility: hidden; background-color: gray; font-size: 1px; cursor:default; z-index: 100}
.dotempty    
{ position: absolute; width: 6; height: 6; visibility: hidden; background-color: orange; font-size: 1px; cursor: pointer; cursor: hand; zindex: 100 }
.caption     
{ position: absolute; visibility: hidden; font-family: Tahoma; color: black; 
               font-size
: 11px; text-align: Center; cursor: default; z-index: 
               1 
}


body           
{ margin: 0px; background-color: white; }
a               
{ color: silver; text-decoration: none }
p               
{ font-size: 10px; font-family: tahoma; color: black } 
</style>
<script language="JavaScript" type="text/javascript">
function lib_bwcheck()//Browsercheck (needed)
    this.ver=navigator.appVersion
    
this.agent=navigator.userAgent
    
this.dom=document.getElementById?1:0
    
this.opera5=this.agent.indexOf("Opera 5")>-1
    
this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0
    
this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
    
this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
    
this.ie=this.ie4||this.ie5||this.ie6
    
this.mac=this.agent.indexOf("Mac")>-1
    
this.ns6=(this.dom && parseInt(this.ver) >= 5?1:0
    
this.ns4=(document.layers && !this.dom)?1:0;
    
this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
    
return this
}

var bw=new lib_bwcheck()


// The code of this script is in the body, the browsercheck above is not used.

</script>
<script language="javascript1.2" type="text/javascript">
<!--
// DotMenu
//
 provides cross-browser functionality
//
======================================
function getObjectRef(name) {
  
if(document.getElementById) return document.getElementById(name);
  
else if(document.all) return document.all[name];
  
else return null;
}


// general functions to assist the script
//
========================================
function show(name) {
  
var el = getObjectRef(name);
  
if(el) el.style.visibility = "visible";
}

function hide(name) {
  
var el = getObjectRef(name);
  
if(el) el.style.visibility = "hidden";
}

function getWidth(name) {
  
var el = getObjectRef(name);
  
return el.offsetWidth;
}

function getHeight(name) {
  
var el = getObjectRef(name);
  
return el.offsetHeight;
}

function moveMe(name,x,y) {
  
var el = getObjectRef(name);
  
if(el) { el.style.top = parseInt(y); el.style.left = parseInt(x); }  
}

function moveBy(name,x,y) {
  
var el = getObjectRef(name);
  
if(el) { el.style.top = parseInt(el.style.top) + parseInt(y); el.style.left = parseInt(el.style.left) + parseInt(x); }  
}


// Creates the menu objects
//
==========================
var menuCount = 0;
function menuObject(name,x,y,caption, r, parent) {
  
if ( (!document.getElementById&&!document.all) || navigator.userAgent.indexOf("Opera")>-1return;
  document.write(
'<div id="divDot' + menuCount + '" class="dotempty" style="top: ' + y + '; left: ' + x + '"></div>');
  document.write(
'<div id="divCap' + menuCount + '" class="caption" style="top: 0; left: 0">' + caption + '</div>');
  
  
this.name = name;
  
this.parent = parent
  
this.ref = "divDot" + menuCount;
  
this.caption = "divCap" + menuCount
  
if(r) this.radius = r;
  
else this.radius = 400;
  
this.subMenus = new Array();
  
this.state = 0;
  
this.moving = false;
  
if(this.parent) this.action = "null";
  
else this.action = "toggle";
  
if(this.parent) this.startAngle = parent.startAngle;
  
else this.startAngle = 0;

  getObjectRef(
this.ref).objRef = this.name;
  
  
this.show = function() { show(this.ref); }
  
this.hide = function() { hide(this.ref); }
  
this.moveMe = function(x,y) if(this.parent) { x += this.parent.x(); y += this.parent.y(); } moveMe(this.ref,x,y); }
  
this.moveBy = function(x,y) { moveBy(this.ref,x,y); }
  
this.x = function() return parseInt(getObjectRef(this.ref).style.left); }
  
this.y = function() return parseInt(getObjectRef(this.ref).style.top); }
  
this.w = function() return getWidth(this.ref); }
  
this.h = function() return getHeight(this.ref); }

  
this.showCaption = function() {
    moveMe(
this.caption, this.x() - (getWidth(this.caption)/2+ (this.w()/2), (this.y() + this.h()));
    show(
this.caption);
  }

  
this.hideCaption = function() {
    hide(
this.caption);
  }

  
this.setCaption = function(c) { getObjectRef(this.caption).innerHTML = c;}
 
  
this.addItem = function(c,action,r) {
    getObjectRef(
this.ref).className = "dot";
    
if(!r) r = this.radius/2;
    
var sub = new menuObject(this.name + ".subMenus[" + this.subMenus.length + "]",0,0,c,r,this);
    sub.parent 
= this;
    sub.action 
= action;
    sub.moveMe(
0,0);
    
this.subMenus[this.subMenus.length] = sub;
    
return sub;
  }

  
  
this.expand = function() {
    
if(this.subMenus.length > 0{
      
var p = true;
      
if(this.parent) {
        p 
= !this.parent.moving;
        
for(var i=0; i<this.parent.subMenus.length;i++)
          p 
= p && ((this.parent.subMenus[i].state==0|| (this.parent.subMenus[i].state==this.parent.subMenus[i].subMenus.length)) && (this.parent.subMenus[i].moving==false);
      }
 else var o = false;