簡體   English   中英

Javascript IE 與 Firefox style.visibility 實現

[英]Javascript IE vs. Firefox style.visibility implementations

我確信這對我來說是一個糟糕的疏忽,但我希望有人能解釋使用.style.visibility/ .style.display 的正確方法,這種方法適用於 IE 和 Firefox。

基本上,我有一個自定義選項卡控件。 第一個選項卡中有一個自定義 MP3 播放器控件。 當用戶點擊不同的標簽時,音樂需要繼續播放,即使它不再可見。

在 IE 中,這可以像宣傳的那樣工作,但在 Firefox 中,當用戶單擊另一個選項卡時,音樂停止並且控件重置為其初始化的 state。

//<summary>
// Display or hide relevent div areas.
//</summary>
//<param name="divId">The id of the viewable div</param>
function toggleDiv(divId) {
    var elems = new Array("0", "1", "2", "3");
    var hdnView = document.getElementById('<%=hdnCurrentDiv.ClientID %>');

    for (div in elems) {
        var elem = document.getElementById(div);

        if (div == divId) {
            elem.style.display = 'block';
            elem.style.visibility = 'visible';
            hdnView.value = divId;
            //highlightSelection(elem);
        }
        else {
            elem.style.display = 'none';
            elem.style.visibility = 'hidden';
        }
    }
}

如何讓 Firefox 表現得像 IE,因為當用戶單擊選項卡時,先前選擇的選項卡上的播放器繼續播放並且只是使該 div 不可見?

您可以將每個選項卡的背景設置為非透明顏色,而不是顯示/隱藏,position 將它們完全重疊並更改它們的 z-index 以將單擊的選項卡帶到堆棧的頂部。

這樣,您就不會遇到元素被破壞/重置的問題。 而且您不必在每次單擊不同的選項卡時更改定位。 你要做的就是改變z-index ...

快速示例:

<html>
<head>
    <style>
    ul
    {
        list-style: none;
    }
    li
    {
        display: inline;
    }
    #Tab1, #Tab2
    {
        background-color: #fff;
        position: absolute;
        top: 0;
        left: 0;
        z-index: 1;
    }
    </style>
    <script>
    function toggleTab( tabID )
    {
        for( var i = 1; i<= 2; i++ )
        {
            var id = "Tab" + i;
            if( id != tabID )
            {
                document.getElementById(id).style.zIndex = "1";
            }
        }

        document.getElementById(tabID).style.zIndex = "2";
    }
    </script>
</head>
<body>
    <ul>
        <li>
            <a href="javascript:toggleTab('Tab1');">Link 1</a>
        </li>
        <li>
            <a href="javascript:toggleTab('Tab2');">Link 2</a>
        </li>
    </ul>
    <div style="position: relative;" id="allTabs">
        <div id="Tab1">
            Tab 1...
        </div>
        <div id="Tab2">
            Tab 2...
        </div>
    </div>
</body>
</html>

如果設置display = 'none' , firefox 會破壞音樂播放器。 您的替代選擇是:

  • 只需設置visibility = 'hidden';
  • Position 元素絕對並將其移動到遠處而不是隱藏(-10000,-10000 是一個很好的起點)

是的,

display=none 將從文檔中刪除元素和所有子元素

visibility=hidden 元素和children是不可見的,但是該元素存在於頁面中並且占用空間

您可以將可見性設置為隱藏,將寬度和高度設置為 1px 或 position 離開頁面某處,作為半顯示無。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM