2017-10-03 14 views
1

ちょっとしたメニューのアイデアのためにいくつかのテストを行っていました。 アイデアはちょうど画面の左上隅に小さな点を持つことです。 オーバーウィングすると、ボックスの影が大きくなります。クリックすると拡大します(幅:100%、高さ:100%)。その後、同じ色の隠しdivが表示されます。 メニューが閉じるクローズボタン(CHIUDI)をクリックするとメニューが開きますが、画面のコーナーにあるドットのホバープロパティは機能しなくなります。
私はCSSルールを修正するためにJavaScriptを使用しているので、これは起こると思います。メニューを閉じるときには、ボックスシャドウを0に設定します。
これはおそらく問題です。 :hover CSSプロパティ
純粋なJavaScriptを使用してこれを修正する方法はありますか? (いいえjQuery)。 !

はここのコードです:

JavaScript Domの後にCSSホバーが動作しない

<html> 
 

 
<head> 
 
    <title>Design Tests</title> 
 
    <style> 
 
    @import url('https://fonts.googleapis.com/css?family=Raleway:200'); 
 
    #button { 
 
     position: fixed; 
 
     width: 50px; 
 
     height: 50px; 
 
     background-color: blue; 
 
     border-radius: 25px; 
 
     transition-duration: 500ms; 
 
     z-index: 1; 
 
     cursor: pointer; 
 
    } 
 
    
 
    #button:hover { 
 
     box-shadow: 0px 0px 0px 30px rgba(0, 0, 255, 1); 
 
    } 
 
    
 
    #menu_container { 
 
     position: fixed; 
 
     width: 100%; 
 
     height: 100%; 
 
     top: 0; 
 
     right: 0; 
 
     left: 0; 
 
     bottom: 0; 
 
     background-color: rgba(0, 0, 255, 1); 
 
     z-index: 0; 
 
     visibility: hidden; 
 
    } 
 
    
 
    #menu { 
 
     transition-duration: 500ms; 
 
     opacity: 0; 
 
    } 
 
    
 
    #close_menu { 
 
     color: white; 
 
     font-family: raleway; 
 
     cursor: pointer; 
 
    } 
 
    </style> 
 
</head> 
 

 
<body> 
 
    <div id="button" onclick="openMenu()"></div> 
 
    <div id="menu_container"> 
 
    <div id="menu"> 
 
     <center> 
 
     <h1 id="close_menu" onclick="closeMenu()">CHIUDI</h1> 
 
     </center> 
 
    </div> 
 
    </div> 
 
    <script> 
 
    function openMenu() { 
 
     document.getElementById('button').style.boxShadow = '0px 0px 0px 100em rgba(0,0,255,1)'; 
 
     setTimeout(showMenu, 500); 
 
    } 
 

 
    function showMenu() { 
 
     document.getElementById('menu_container').style.visibility = 'visible'; 
 
     document.getElementById('menu_container').style.zIndex = '2'; 
 
     document.getElementById('menu').style.opacity = '1'; 
 
    } 
 

 
    function closeMenu() { 
 
     document.getElementById('menu').style.opacity = '0'; 
 
     setTimeout(hideMenu, 400); 
 
    } 
 

 
    function hideMenu() { 
 
     document.getElementById('menu_container').style.visibility = 'hidden'; 
 
     document.getElementById('menu_container').style.zIndex = '0'; 
 
     document.getElementById('button').style.boxShadow = '0px 0px 0px 0px rgba(0,0,255,1)'; 
 
    } 
 
    </script> 
 
</body> 
 

 
</html>

-UPDATE-

私はCSSの重要なプロパティを使用しようとしましたが、それは動作しません。 !重要なルールを使用すると、JavaScriptはそのルールに影響しませんが(私が正しい場合)、アニメーション自体を作成するためにボックスシャドウを使用する必要があるため、JavaScriptはそのルールを編集する必要があります。
基本的に、ボックスシャドウホバールールで!importantを使用して、このバグを修正しますが、メニューを開くと、アニメーションは表示されません。

+0

でも英語の文法エラーのため申し訳ありません:ここでの関数です。 – Zero

答えて

0

JSを使用してスタイルを適用すると、インラインスタイルとなり、ホバーより優先度が高くなります。あなたはへの重要な追加する可能性があります。このようにホバー:

<html> 
 

 
<head> 
 
    <title>Design Tests</title> 
 
    <style> 
 
    @import url('https://fonts.googleapis.com/css?family=Raleway:200'); 
 
    #button { 
 
     position: fixed; 
 
     width: 50px; 
 
     height: 50px; 
 
     background-color: blue; 
 
     border-radius: 25px; 
 
     transition-duration: 500ms; 
 
     z-index: 1; 
 
     cursor: pointer; 
 
    } 
 
    
 
    #button:hover { 
 
     box-shadow: 0px 0px 0px 30px rgba(0, 0, 255, 1)!important; 
 
    } 
 
    
 
    #menu_container { 
 
     position: fixed; 
 
     width: 100%; 
 
     height: 100%; 
 
     top: 0; 
 
     right: 0; 
 
     left: 0; 
 
     bottom: 0; 
 
     background-color: rgba(0, 0, 255, 1); 
 
     z-index: 0; 
 
     visibility: hidden; 
 
    } 
 
    
 
    #menu { 
 
     transition-duration: 500ms; 
 
     opacity: 0; 
 
    } 
 
    
 
    #close_menu { 
 
     color: white; 
 
     font-family: raleway; 
 
     cursor: pointer; 
 
    } 
 
    </style> 
 
</head> 
 

 
<body> 
 
    <div id="button" onclick="openMenu()"></div> 
 
    <div id="menu_container"> 
 
    <div id="menu"> 
 
     <center> 
 
     <h1 id="close_menu" onclick="closeMenu()">CHIUDI</h1> 
 
     </center> 
 
    </div> 
 
    </div> 
 
    <script> 
 
    function openMenu() { 
 
     document.getElementById('button').style.boxShadow = '0px 0px 0px 100em rgba(0,0,255,1)'; 
 
     setTimeout(showMenu, 500); 
 
    } 
 

 
    function showMenu() { 
 
     document.getElementById('menu_container').style.visibility = 'visible'; 
 
     document.getElementById('menu_container').style.zIndex = '2'; 
 
     document.getElementById('menu').style.opacity = '1'; 
 
    } 
 

 
    function closeMenu() { 
 
     document.getElementById('menu').style.opacity = '0'; 
 
     setTimeout(hideMenu, 400); 
 
    } 
 

 
    function hideMenu() { 
 
     document.getElementById('menu_container').style.visibility = 'hidden'; 
 
     document.getElementById('menu_container').style.zIndex = '0'; 
 
     document.getElementById('button').style.boxShadow = '0px 0px 0px 0px rgba(0,0,255,1)'; 
 
    } 
 
    </script> 
 
</body> 
 

 
</html>

が、良いアイデアはクラスを使用して、このようなJSでそれらを切り替えることである。

function openMenu() { 
 
    document.getElementById('button').className="open"; 
 
    setTimeout(showMenu, 500); 
 
} 
 

 
function showMenu() { 
 
document.getElementById('menu_container').className="show"; 
 
document.getElementById('menu').style.opacity = '1'; 
 
} 
 

 
function closeMenu() { 
 
    document.getElementById('menu').style.opacity = '0'; 
 
    setTimeout(hideMenu, 400); 
 
} 
 

 

 
function hideMenu() { 
 
document.getElementById('menu_container').className=""; 
 
    document.getElementById('button').className=""; 
 
}
@import url('https://fonts.googleapis.com/css?family=Raleway:200'); 
 
#button { 
 
    position: fixed; 
 
    width: 50px; 
 
    height: 50px; 
 
    background-color: blue; 
 
    border-radius: 25px; 
 
    transition-duration: 500ms; 
 
    z-index: 1; 
 
    cursor: pointer; 
 
} 
 
#button.open { 
 
box-shadow: 0px 0px 0px 100em rgba(0,0,255,1); 
 
} 
 

 
#button:hover { 
 
    box-shadow: 0px 0px 0px 30px rgba(0, 0, 255, 1); 
 
} 
 

 
#menu_container { 
 
    position: fixed; 
 
    width: 100%; 
 
    height: 100%; 
 
    top: 0; 
 
    right: 0; 
 
    left: 0; 
 
    bottom: 0; 
 
    background-color: rgba(0, 0, 255, 1); 
 
    z-index: 0; 
 
    visibility: hidden; 
 
    opacity:0; 
 
} 
 
#menu_container.show { 
 
visibility: visible; 
 
z-index:2; 
 
opacity:1; 
 
} 
 

 
#menu { 
 
    transition-duration: 500ms; 
 
    opacity: 0; 
 
} 
 

 
#close_menu { 
 
    color: white; 
 
    font-family: raleway; 
 
    cursor: pointer; 
 
}
<html> 
 

 
<body> 
 
    <div id="button" onclick="openMenu()"></div> 
 
    <div id="menu_container"> 
 
    <div id="menu"> 
 
     <center> 
 
     <h1 id="close_menu" onclick="closeMenu()">CHIUDI</h1> 
 
     </center> 
 
    </div> 
 
    </div> 
 
</body>

+0

私はこれを行っています、問題は、重要なプロパティを開いてメニューのアニメーションを作るために重要なプロパティを使用してJavaScriptを使用することです、私は問題を修正するだろうが、私は新しい問題があるだろう。アニメーションをもう一度作るにはどうすればいいですか? divディメンションを変更してみましたが、アニメーションはこれほど見栄えが良くなりません。 他のアイデアはありますか? – Zero

+0

@Zero別の解決策で私の答えを更新;) –

+0

JavaScript DOMを使用して:ホバープロパティを作ることはできますか?それは問題を解決するだろう。 – Zero

0

これを作成しましたそれ以上の自己挑戦ではなく、ちょうどjavascriptを使用してホバー効果を達成することができました。あなたは:hoverをcssから削除し、onmouseenteronmouseoutと呼ぶことができる関数を作成することができます。

function hoverDot() { 
    document.getElementById('button').style.boxShadow = '0px 0px 0px 0px rgba(0,0,255,0)'; 
    document.getElementById('button').onmouseout = function(){ 
    document.getElementById('button').style.boxShadow = '0px 0px 0px 0px rgba(0,0,255,0)'; 
    } 

    document.getElementById('button').onmouseenter = function(){ 
    document.getElementById('button').style.boxShadow = '0px 0px 0px 30px rgba(0,0,255,1)'; 
    } 
} 

hoverDot(); //intially call hover function 
 

 
function openMenu() { 
 
    document.getElementById('button').style.boxShadow = '0px 0px 0px 100em rgba(0,0,255,1)'; 
 
    setTimeout(showMenu, 500); 
 
} 
 

 
function showMenu() { 
 
    document.getElementById('menu_container').style.visibility = 'visible'; 
 
    document.getElementById('menu_container').style.zIndex = '2'; 
 
    document.getElementById('menu').style.opacity = '1'; 
 
} 
 

 
function closeMenu() { 
 
    document.getElementById('menu').style.opacity = '0'; 
 
    document.getElementById('button').style.boxShadow = '0px 0px 0px 100em rgba(0,0,255,1)'; 
 
    setTimeout(hideMenu, 400); 
 
    setTimeout(hoverDot, 400); //Called function here 
 
} 
 

 
function hideMenu() { 
 
    document.getElementById('menu_container').style.visibility = 'hidden'; 
 
    document.getElementById('menu_container').style.zIndex = '0'; 
 
    document.getElementById('button').style.boxShadow = '0px 0px 0px 0px rgba(0,0,255,1)'; 
 
} 
 

 
function hoverDot() { 
 
    document.getElementById('button').style.boxShadow = '0px 0px 0px 0px rgba(0,0,255,0)'; 
 
    document.getElementById('button').onmouseout = function(){ 
 
    document.getElementById('button').style.boxShadow = '0px 0px 0px 0px rgba(0,0,255,0)'; 
 
    } 
 

 
    document.getElementById('button').onmouseenter = function(){ 
 

 
    document.getElementById('button').style.boxShadow = '0px 0px 0px 30px rgba(0,0,255,1)'; 
 
    } 
 

 
}
<html> 
 

 
<head> 
 
    <title>Design Tests</title> 
 
    <style> 
 
    @import url('https://fonts.googleapis.com/css?family=Raleway:200'); 
 
    #button { 
 
     position: fixed; 
 
     width: 50px; 
 
     height: 50px; 
 
     background-color: blue; 
 
     border-radius: 25px; 
 
     transition-duration: 500ms; 
 
     z-index: 1; 
 
     cursor: pointer; 
 
    } 
 
    
 
    #menu_container { 
 
     position: fixed; 
 
     width: 100%; 
 
     height: 100%; 
 
     top: 0; 
 
     right: 0; 
 
     left: 0; 
 
     bottom: 0; 
 
     background-color: rgba(0, 0, 255, 1); 
 
     z-index: 0; 
 
     visibility: hidden; 
 
    } 
 
    
 
    #menu { 
 
     transition-duration: 500ms; 
 
     opacity: 0; 
 
    } 
 
    
 
    #close_menu { 
 
     color: white; 
 
     font-family: raleway; 
 
     cursor: pointer; 
 
    } 
 
    </style> 
 
</head> 
 

 
<body> 
 
    <div id="button" onclick="openMenu()"></div> 
 
    <div id="menu_container"> 
 
    <div id="menu"> 
 
     <center> 
 
     <h1 id="close_menu" onclick="closeMenu()">CHIUDI</h1> 
 
     </center> 
 
    </div> 
 
    </div> 
 
</body> 
 

 
</html>

関連する問題