MozTW 討論區
https://forum.moztw.org/

緊急的js問題
https://forum.moztw.org/viewtopic.php?f=13&t=12494
1 頁 (共 1 頁)

發表人:  tszkin [ 2006-01-19, 21:49 ]
文章主題 :  緊急的js問題

我寫了一個js,但在firefox是沒有效的,我的是在mouse滑過時,顯示了下拉式選單....

代碼:
<!--

var menuOffX=0        //菜單距連接文字最左端距離
var menuOffY=18        //菜單距連接文字頂端距離

var fo_shadows=new Array()
var linkset=new Array()


var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1
var ns6=document.getElementById&&!document.all
var ns4=document.layers
function openScript(url, width, height){
        var Win = window.open(url,"openScript",'width=' + width + ',height=' + height + ',resizable=1,scrollbars=yes,menubar=no,status=no' );
}

function showmenu(e,vmenu,mod){
        if (!document.all&&!document.getElementById&&!document.layers)
                return
        which=vmenu
        clearhidemenu()
        ie_clearshadow()
        menuobj=ie4? document.all.popmenu : ns6? document.getElementById("popmenu") : ns4? document.popmenu : ""
        menuobj.thestyle=(ie4||ns6)? menuobj.style : menuobj
       
        if (ie4||ns6)
                menuobj.innerHTML=which
        else{
                menuobj.document.write('<layer name=gui bgColor=#E6E6E6 width=165 onmouseover="clearhidemenu()" onmouseout="hidemenu()">'+which+'</layer>')
                menuobj.document.close()
        }
        menuobj.contentwidth=(ie4||ns6)? menuobj.offsetWidth : menuobj.document.gui.document.width
        menuobj.contentheight=(ie4||ns6)? menuobj.offsetHeight : menuobj.document.gui.document.height
       
        eventX=ie4? event.clientX : ns6? e.clientX : e.x
        eventY=ie4? event.clientY : ns6? e.clientY : e.y
       
        var rightedge=ie4? document.body.clientWidth-eventX : window.innerWidth-eventX
        var bottomedge=ie4? document.body.clientHeight-eventY : window.innerHeight-eventY
                if (rightedge<menuobj.contentwidth)
                        menuobj.thestyle.left=ie4? document.body.scrollLeft+eventX-menuobj.contentwidth+menuOffX : ns6? window.pageXOffset+eventX-menuobj.contentwidth : eventX-menuobj.contentwidth
                else
                        menuobj.thestyle.left=ie4? ie_x(event.srcElement)+menuOffX : ns6? window.pageXOffset+eventX : eventX
               
                if (bottomedge<menuobj.contentheight&&mod!=0)
                        menuobj.thestyle.top=ie4? ie_y(event.srcElement)+menuOffY : ns6? window.pageYOffset+eventY+10 : eventY
                else
                        menuobj.thestyle.top=ie4? ie_y(event.srcElement)+menuOffY : ns6? window.pageYOffset+eventY+10 : eventY
        menuobj.thestyle.visibility="visible"
        ie_dropshadow(menuobj,"#999999",3)
        return false
}

function ie_y(e){ 
        var t=e.offsetTop; 
        while(e=e.offsetParent){ 
                t+=e.offsetTop; 
        } 
        return t; 

function ie_x(e){ 
        var l=e.offsetLeft; 
        while(e=e.offsetParent){ 
                l+=e.offsetLeft; 
        } 
        return l; 

function ie_dropshadow(el, color, size)
{
        var i;
        for (i=size; i>0; i--)
        {
                var rect = document.createElement('div');
                var rs = rect.style
                rs.position = 'absolute';
                rs.left = (el.style.posLeft + i) + 'px';
                rs.top = (el.style.posTop + i) + 'px';
                rs.width = el.offsetWidth + 'px';
                rs.height = el.offsetHeight + 'px';
                rs.zIndex = el.style.zIndex - i;
                rs.backgroundColor = color;
                var opacity = 1 - i / (i + 1);
                rs.filter = 'alpha(opacity=' + (100 * opacity) + ')';
                //el.insertAdjacentElement('afterEnd', rect);
                fo_shadows[fo_shadows.length] = rect;
        }
}
function ie_clearshadow()
{
        for(var i=0;i<fo_shadows.length;i++)
        {
                if (fo_shadows[i])
                        fo_shadows[i].style.display="none"
        }
        fo_shadows=new Array();
}


function contains_ns6(a, b) {
        while (b.parentNode)
                if ((b = b.parentNode) == a)
                        return true;
        return false;
}

function hidemenu(){
        if (window.menuobj)
                menuobj.thestyle.visibility=(ie4||ns6)? "hidden" : "hide"
        ie_clearshadow()
}

function dynamichide(e){
        if (ie4&&!menuobj.contains(e.toElement))
                hidemenu()
        else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))
                hidemenu()
}

function delayhidemenu(){
        if (ie4||ns6||ns4)
                delayhide=setTimeout("hidemenu()",500)
}

function clearhidemenu(){
        if (window.delayhide)
                clearTimeout(delayhide)
}

function highlightmenu(e,state){
        if (document.all)
                source_el=event.srcElement
        else if (document.getElementById)
                source_el=e.target
        if (source_el.className=="menuitems"){
                source_el.id=(state=="on")? "mouseoverstyle" : ""
        }
        else{
                while(source_el.id!="popmenu"){
                        source_el=document.getElementById? source_el.parentNode : source_el.parentElement
                        if (source_el.className=="menuitems"){
                                source_el.id=(state=="on")? "mouseoverstyle" : ""
                        }
                }
        }
}





//-->


勞煩了各位

發表人:  kourge [ 2006-01-20, 04:02 ]
文章主題 : 

Look near the end of the function showmenu
代碼:
menuobj.thestyle.visibility="visible"

maybe this would work...
代碼:
menuobj.thestyle.visibility="visible";
menuobj.thestyle.display="block";

What a messy js code...

發表人:  tszkin [ 2006-01-20, 10:12 ]
文章主題 : 

kourge 寫:
Look near the end of the function showmenu
代碼:
menuobj.thestyle.visibility="visible"

maybe this would work...
代碼:
menuobj.thestyle.visibility="visible";
menuobj.thestyle.display="block";

What a messy js code...

小弟入世未深啊 :oops:

發表人:  kourge [ 2006-01-20, 16:24 ]
文章主題 : 

嗯,我在想...Eric Meyer 的純 CSS 選單應該會比較好^^;

發表人:  tszkin [ 2006-01-20, 21:21 ]
文章主題 : 

kourge 寫:
嗯,我在想...Eric Meyer 的純 CSS 選單應該會比較好^^;
可以介紹一下嗎^^ :P

發表人:  josesun [ 2006-01-21, 00:16 ]
文章主題 : 

kourge 寫:
嗯,我在想...Eric Meyer 的純 CSS 選單應該會比較好^^;

這個除了掛 IE7 ,不然 IE 不支援吧...= ="

發表人:  kourge [ 2006-01-21, 03:28 ]
文章主題 : 

josesun 寫:
kourge 寫:
嗯,我在想...Eric Meyer 的純 CSS 選單應該會比較好^^;

這個除了掛 IE7 ,不然 IE 不支援吧...= ="

You can use csshover.htc to fix that.

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/