2017-06-19 4 views
-3

HTMLとCSSを使用して作成したいくつかの情報ボックスの下にコードがあります。閉じるボタンをクリックするまで、ホバーのdivを開いたままにすることは可能ですか?これはバニラのJavaScriptで可能ですか?私はJavaScriptに何か助けてくれるので、歓迎します!ボタンをクリックするまでJavaScriptのホバー機能は開いたままです

.everything { 
 
    text-align: center; 
 
    height: 1000px; 
 
} 
 

 
.everything:hover { 
 
    cursor: default; 
 
} 
 

 
.infobox-list { 
 
    display: inline-block; 
 
    text-align: center; 
 
} 
 

 
ul, 
 
ol, 
 
li { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style-position: outside; 
 
    list-style-type: none; 
 
} 
 

 
h1, 
 
h2, 
 
h3, 
 
h4, 
 
h5, 
 
h6, 
 
ul, 
 
li, 
 
ol, 
 
form, 
 
fieldset { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
*, 
 
*:before, 
 
*:after { 
 
    -moz-box-sizing: border-box; 
 
    -webkit-box-sizing: border-box; 
 
    box-sizing: border-box; 
 
} 
 

 
ul, 
 
menu, 
 
dir { 
 
    display: block; 
 
    list-style-type: disc; 
 
    -webkit-margin-before: 1em; 
 
    -webkit-margin-after: 1em; 
 
    -webkit-margin-start: 0px; 
 
    -webkit-margin-end: 0px; 
 
    -webkit-padding-start: 0px; 
 
} 
 

 
.hr { 
 
    border-color: rgba(255, 255, 255, 0.3); 
 
    margin-left: 9px; 
 
    width: 210px; 
 
} 
 

 
body { 
 
    font-family: Arial, Helvetica, sans-serif; 
 
    font-size: 16px; 
 
    padding: 0; 
 
    margin: 0; 
 
    background-color: #fcfcfc; 
 
    color: #555; 
 
    min-width: 20em; 
 
} 
 

 
.info-boxes li { 
 
    width: 310px; 
 
    height: 535px; 
 
    background: #f2f2f2; 
 
    border: 0px solid #efefef; 
 
    border-radius: 4px; 
 
    margin: 0 0px 0px; 
 
    cursor: pointer; 
 
    position: relative; 
 
    overflow: hidden; 
 
    transform: scale(0.75); 
 
} 
 

 
.ptext { 
 
    text-align: center; 
 
    font-size: 20px; 
 
} 
 

 
.profile { 
 
    margin-top: 10%; 
 
    margin-left: 1px; 
 
    width: 75px; 
 
    height: 75px; 
 
} 
 

 
.performance { 
 
    margin-left: 1px; 
 
    margin-top: 10%; 
 
    width: 75px; 
 
    height: 75px; 
 
} 
 

 
.learning { 
 
    margin-top: 10%; 
 
    width: 75px; 
 
    height: 75px; 
 
} 
 

 
.team { 
 
    margin-top: 10%; 
 
    width: 75px; 
 
    height: 75px; 
 
} 
 

 
.smallicons { 
 
    width: 50px; 
 
    height: 50px; 
 
} 
 

 
.profileclose { 
 
    margin-top: 215px; 
 
} 
 

 
.infobox-list li { 
 
    display: inline-block; 
 
} 
 

 
a { 
 
    color: white; 
 
    text-decoration: none; 
 
    font-weight: lighter; 
 
} 
 

 
.info-boxes li .infobox { 
 
    display: table-cell; 
 
    text-align: center; 
 
    vertical-align: middle; 
 
    height: 535px; 
 
    width: 310px; 
 
} 
 

 
.info-boxes li .infobox:before { 
 
    content: ''; 
 
    position: absolute; 
 
    left: 20%; 
 
    width: 160%; 
 
    height: 188%; 
 
    background-color: rgb(255, 255, 255); 
 
    /* fallback */ 
 
    background-color: rgba(255, 255, 255, 0.2); 
 
    top: 0; 
 
    -webkit-transform: rotate(46deg); 
 
    -moz-transform: rotate(46deg); 
 
    transform: rotate(30deg); 
 
} 
 

 
.info-boxes li:hover .shade { 
 
    animation-name: windowshade; 
 
    cursor: pointer; 
 
} 
 

 
.info-boxes li .shade, 
 
.info-boxes li:hover .shade { 
 
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); 
 
    animation-duration: 1s; 
 
    animation-iteration-count: 1; 
 
    animation-fill-mode: forwards; 
 
} 
 

 
section p { 
 
    line-height: 1.3em; 
 
    color: #6d6e71; 
 
    width: 100%; 
 
    padding: 0 10px; 
 
    margin-top: 5px; 
 
    margin-left: 0px; 
 
    text-align: left; 
 
} 
 

 
p { 
 
    display: block; 
 
} 
 

 
.info-boxes li .shade { 
 
    position: absolute; 
 
    width: 310px; 
 
    height: 555px; 
 
    left: 0; 
 
    top: 0; 
 
    background-color: #6caf46; 
 
    color: #fff; 
 
    display: table; 
 
    vertical-align: middle; 
 
    padding: 20px 10px 0; 
 
    transform: translateY(-340px); 
 
    animation-name: windowshade-out; 
 
} 
 

 
.info-boxes li .shade h3 { 
 
    color: #fff; 
 
    padding: 10px; 
 
    font-weight: bold 
 
} 
 

 
.info-boxes li .shade p { 
 
    color: #fff; 
 
    line-height: 3em; 
 
    font-weight: lighter; 
 
} 
 

 
.ie9 .info-boxes li:hover .shade { 
 
    top: 245px 
 
} 
 

 
.info-boxes li:hover a { 
 
    text-decoration: none 
 
} 
 

 
@keyframes windowshade { 
 
    0% { 
 
    transform: translateY(-535px) 
 
    } 
 
    100% { 
 
    transform: translateY(0) 
 
    } 
 
} 
 

 
@keyframes windowshade-out { 
 
    0% { 
 
    transform: translateY(0) 
 
    } 
 
    100% { 
 
    transform: translateY(-535px) 
 
    } 
 
} 
 

 
#wrapper { 
 
    margin: 0 auto; 
 
} 
 

 
#wrapper img { 
 
    width: 100%; 
 
    /* the image will now scale down as its parent gets smaller */ 
 
}
<div class="everything"> 
 

 

 
    <div class="everything"> 
 
    <br style="line-height:35px;"> 
 
    <section class="info-boxes"> 
 
     <ul class="infobox-list"> 
 
     <li> 
 
      <a href="#"> 
 
      <div class="infobox"> 
 
       <table> 
 
       <tr> 
 
        <img class="profile" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497637065/profile_i0evlz.png"></tr> 
 
       <tr> 
 
        <p class="ptext">Profile</p> 
 
       </tr> 
 
       </table> 
 
      </div> 
 
      <div class="shade"> 
 
       <table> 
 
       <tr> 
 
        <td> 
 
        <img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497301295/About-Me_dudglr.png"> 
 
        </td> 
 
        <td> 
 
        <p>About Me</p> 
 
        <hr class="hr"> 
 
        </td> 
 
       </tr> 
 
       <tr> 
 
        <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497284615/Resume_tb7t02.png"> </td> 
 
        <td> 
 
        <p>Resume</p> 
 
        <hr class="hr"> 
 
        </td> 
 
       </tr> 
 
       <tr> 
 
        <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497280574/Accountabilities_qfdcns.png"> </td> 
 
        <td> 
 
        <p>Accountabilities 
 
         <p/> 
 
         <hr class="hr"> 
 
        </td> 
 
       </tr> 
 
       </table> 
 
       <div class="profileclose">Close</div> 
 
      </div> 
 
      </a> 
 
     </li> 
 
     <li> 
 
      <div class="infobox"> 
 
      <table> 
 
       <tr> 
 
       <img class="learning" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497637065/Learning-Icon_hqtc2k.png"></tr> 
 
       <tr> 
 
       <p class="ptext">Learning</p> 
 
       </tr> 
 
      </table> 
 
      </div> 
 
      <div class="shade"> 
 
      <table> 
 
       <tr> 
 
       <td> 
 
        <img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497297687/Training-Plan_v43ne7.png"> 
 
       </td> 
 
       <td> 
 
        <p>Training Plan</p> 
 
        <hr class="hr"> 
 
       </td> 
 
       </tr> 
 
       <tr> 
 
       <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497297687/Training-History_czttv1.png"> </td> 
 
       <td> 
 
        <p>Training History</p> 
 
        <hr class="hr"> 
 
       </td> 
 
       </tr> 
 
       <tr> 
 
       <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497298863/coursefeedback_qdh1wm.png"> </td> 
 
       <td> 
 
        <p>Course Feedback</p> 
 
        <hr class="hr"> 
 
       </td> 
 
       </tr> 
 
       <tr> 
 
       <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497299106/Favourites_y9gkce.png"> </td> 
 
       <td> 
 
        <p>Training Favourites 
 
        <p/> 
 
        <hr class="hr"> 
 
       </td> 
 
       </tr> 
 
      </table> 
 
      </div> 
 
     </li> 
 

 
     <li> 
 
      <a href="#"> 
 
      <div class="infobox"> 
 
       <table> 
 
       <tr> 
 
        <img class="performance" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497637065/Performance-Icon_ozaldt.png"></tr> 
 
       <tr> 
 
        <p class="ptext">Performance</p> 
 
       </tr> 
 
       </table> 
 
      </div> 
 
      <div class="shade"> 
 
       <table> 
 
       <tr> 
 
        <td> 
 
        <img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497284615/Goals_aw4nso.png"> 
 
        </td> 
 
        <td> 
 
        <p>Goals</p> 
 
        <hr class="hr"> 
 
        </td> 
 
       </tr> 
 
       <tr> 
 
        <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497284934/EA_n8lvj1.png" </td> 
 
        <td> 
 
         <p>Effectiveness Assessment</p> 
 
         <hr class="hr"> 
 
        </td> 
 
       </tr> 
 
       <tr> 
 
        <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497284615/development_yfv6o1.png" </td> 
 
        <td> 
 
         <p>Development Plan</p> 
 
         <hr class="hr"> 
 
        </td> 
 
       </tr> 
 
       <tr> 
 
        <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497285433/resources_b3r88g.png"> </td> 
 
        <td> 
 
        <p>Resources 
 
         <p/> 
 
         <hr class="hr"> 
 
        </td> 
 
       </tr> 
 
       </table> 
 
      </div> 
 
      </a> 
 
     </li> 
 

 
     <li> 
 
      <div class="infobox"> 
 
      <table> 
 
       <tr> 
 
       <img class="team" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497637065/team_nl2cwh.png"></tr> 
 
       <tr> 
 
       <p class="ptext">Team</p> 
 
       </tr> 
 
      </table> 
 
      </div> 
 
      <div class="shade"> 
 
      <table> 
 
       <tr> 
 
       <td> 
 
        <img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497300652/Team_iovnl5.png"> 
 
       </td> 
 
       <td> 
 
        <p>Team</p> 
 
        <hr class="hr"> 
 
       </td> 
 
       </tr> 
 
       <tr> 
 
       <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497284615/Goals_aw4nso.png"> </td> 
 
       <td> 
 
        <p>Team Goals</p> 
 
        <hr class="hr"> 
 
       </td> 
 
       </tr> 
 
       <tr> 
 
       <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497284615/development_yfv6o1.png"> </td> 
 
       <td> 
 
        <p>Team Development</p> 
 
        <hr class="hr"> 
 
       </td> 
 
       </tr> 
 
       <tr> 
 
       <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497297687/Training-Plan_v43ne7.png"> </td> 
 
       <td> 
 
        <p>Team Training</p> 
 
        <hr class="hr"> 
 
       </td> 
 
       </tr> 
 
       <tr> 
 
       <td><img class="smallicons" src="http://res.cloudinary.com/djxai1v1e/image/upload/v1497301295/Approval_f9y1da.png"> </td> 
 
       <td> 
 
        <p>Approvals 
 
        <p/> 
 
        <hr class="hr"> 
 
       </td> 
 
       </tr> 
 
      </table> 
 
      </div> 
 

 
     </li> 
 
     </ul> 
 
    </section> 
 
    </div>

+0

はい、可能です。これまでに何を試しましたか?閉じるボタンをクリックしてDOMを非表示にするか破棄することができます。 – mkaatman

答えて

1

これは少し長いですが、ここでfiddleです。

基本的には、イベントを処理するマウスをイベントハンドラとして定義し、イベントをクリックしてイベントを閉じ、そのイベントを処理するようにCSSを変更します。私はポストし、更新の各ビットを瞬時に説明します。あなただけの(という疑似クラスを使用するよりも)「ホバー」クラスを追加および削除開閉扱いについて

、:そして、

function open(e){ 
    let li = e.target; 
    li.classList.add('hover'); 
} 

function close(e){ 
    const hoverable = e.target.closest('li.hover'); 
    hoverable.classList.remove('hover'); 
} 

あなたを変更します。代わりに.hover使用するようにCSSで疑似クラスを置く:

.info-boxes li.hover .shade { 
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); 
    animation-duration: 1s; 
    animation-iteration-count: 1; 
    animation-fill-mode: forwards; 
} 

追加するイベントハンドラと、そのようなは簡単です:

const infoBoxListItems = document.querySelectorAll('.info-boxes li'); 
const closeButtons = document.querySelectorAll('.profileclose'); 

infoBoxListItems.forEach(li => { 
    li.addEventListener('mouseenter', open); 
}); 

closeButtons.forEach(btn => { 
    btn.addEventListener('click', close); 
}); 

私の完全な電子xampleにはclosest()のpolyfillが含まれていますが、これはMDNのストレートコピーであるため、そこで読み上げることができます。

+0

何らかの理由でホバー機能が動作していないようです。 –

+0

あなたは最新のブラウザを使用していますか? Chromeでうまく動作します:最新です。あなたが別のものを持っていれば、私は入力を保存するために使ったことのいくつかのためにpolyfillする必要があります。 – Paul

+0

私はIEを使用していますが、これはEdgeとおそらくSafariでも動作する必要があります。私の主な関心事は、IEで動作することです。 –

関連する問題