2017-08-14 64 views
0

是否可以使用jQuery(或纯CSS)将CSS悬停动作链接到另一个链接?使用jQuery触发CSS悬停

我有一个组合的悬停和工具提示动画,意味着叠加在地图上。我想要实现的是在列表中悬停在城市名称上时进行悬停点火。

a { 
 
    text-decoration: none; 
 
} 
 
a:hover { 
 
    color: #d82631; 
 
} 
 

 
.location { 
 
    position: absolute; 
 
} 
 

 
.kart_dot { 
 
    position: relative; 
 
    width: 20px; 
 
    height: 20px; 
 
    margin-top: -10px; 
 
    margin-left: -10px; 
 
    cursor: pointer; 
 
} 
 

 
.kart_dot::before { 
 
    display: block; 
 
    content: ""; 
 
    position: absolute; 
 
    top: 50%; 
 
    left: 50%; 
 
    width: 12px; 
 
    height: 12px; 
 
    background: #d82631 none repeat scroll 0% 0%; 
 
    border-radius: 50%; 
 
    margin-top: -6px; 
 
    margin-left: -6px; 
 
} 
 

 
.kart_dot:hover::before, 
 
.kart_dot:focus::before, 
 
.kart_dot:active::before { 
 
    background-color: #000; 
 
    -webkit-transition: all 0.20s ease-in-out !important; 
 
    -moz-transition: all 0.20s ease-in-out !important; 
 
    -ms-transition: all 0.20s ease-in-out !important; 
 
    -o-transition: all 0.20s ease-in-out !important; 
 
    width: 18px; 
 
    height: 18px; 
 
    margin-top: -9px; 
 
    margin-left: -9px; 
 
} 
 

 
[data-tooltip]:before, 
 
[data-tooltip]:after, 
 
.tooltip:before, 
 
.tooltip:after { 
 
    position: absolute; 
 
    visibility: hidden; 
 
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; 
 
    filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=0); 
 
    opacity: 0; 
 
    -webkit-transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, -webkit-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24); 
 
    -moz-transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, -moz-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24); 
 
    transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24); 
 
    -webkit-transform: translate3d(0, 0, 0); 
 
    -moz-transform: translate3d(0, 0, 0); 
 
    transform: translate3d(0, 0, 0); 
 
    pointer-events: none; 
 
} 
 

 
[data-tooltip]:hover:before, 
 
[data-tooltip]:hover:after, 
 
[data-tooltip]:focus:before, 
 
[data-tooltip]:focus:after, 
 
.tooltip:hover:before, 
 
.tooltip:hover:after, 
 
.tooltip:focus:before, 
 
.tooltip:focus:after { 
 
    visibility: visible; 
 
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; 
 
    filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=100); 
 
    opacity: 1; 
 
} 
 

 
.tooltip:after, 
 
[data-tooltip]:after { 
 
    z-index: 1000; 
 
    padding: 15px; 
 
    width: 160px; 
 
    color: #000; 
 
    content: attr(data-tooltip); 
 
    font-size: 14px; 
 
    line-height: 0.9; 
 
} 
 

 
.tooltip-hoyre:before, 
 
.tooltip-hoyre:after { 
 
    bottom: 50%; 
 
    left: 100%; 
 
} 
 

 
.tooltip-hoyre:before { 
 
    margin-bottom: 0; 
 
    margin-left: -8px; 
 
    border-top-color: transparent; 
 
    border-right-color: #000; 
 
    border-right-color: hsla(0, 0%, 20%, 0.9); 
 
} 
 

 
.tooltip-hoyre:hover:before, 
 
.tooltip-hoyre:hover:after, 
 
.tooltip-hoyre:focus:before, 
 
.tooltip-hoyre:focus:after { 
 
    -webkit-transform: translateX(12px); 
 
    -moz-transform: translateX(12px); 
 
    transform: translateX(12px); 
 
} 
 

 
.tooltip-hoyre:after { 
 
    margin-left: 0; 
 
    margin-bottom: -16px; 
 
    margin-left: -18px; 
 
}
<div><a href="#new_york">New York</a></div> 
 
<div><a href="#washington">Washington</a></div> 
 

 
<div class="location" style="top: 20%; left: 20%;"> 
 
    <a href="#new_york" class="tooltip-hoyre" data-tooltip="New York"> 
 
    <div class="kart_dot"></div> 
 
    </a> 
 
</div> 
 

 
<div class="location" style="top: 38%; left: 20%;"> 
 
    <a href="#washington" class="tooltip-hoyre" data-tooltip="Washington"> 
 
    <div class="kart_dot"></div> 
 
    </a> 
 
</div>

我也包括这是一个小提琴:https://jsfiddle.net/7Lsvdqpx/3/

我尝试了好几种建议的方法没有任何的运气,像这样的:Trigger hover with jQuery?

+0

https://stackoverflow.com/questions/14013958/add-hover-selector-to-class-1-when-hovering-over-class-2您是否尝试过这个?你需要包括你试过的Javascript,所以我们可以帮你 – mintychai

回答

3

你可以做这与纯CSS和没有jQuery通过使用相邻的选择器(~)。我已经在下面的代码片段中实现了它,并且不得不添加一些HTML类。下面是如何工作的一个例子:

.list-ny:hover ~ .location .dot-ny:before, 
.list-ny:hover ~ .location .dot-ny:after, 
.list-wa:hover ~ .location .dot-wa:before, 
.list-wa:hover ~ .location .dot-wa:after 

上面的代码中说...如果你悬停.list-ny菜单项,然后选择中有一个.dot-ny:before相邻.location元素和应用相关的样式。

下面是对所有相关属性来实现悬停的完整的例子:

a { 
 
    text-decoration: none; 
 
} 
 

 
a:hover { 
 
    color: #d82631; 
 
} 
 

 
.location { 
 
    position: absolute; 
 
} 
 

 
.kart_dot { 
 
    position: relative; 
 
    width: 20px; 
 
    height: 20px; 
 
    margin-top: -10px; 
 
    margin-left: -10px; 
 
    cursor: pointer; 
 
} 
 

 
.kart_dot::before { 
 
    display: block; 
 
    content: ""; 
 
    position: absolute; 
 
    top: 50%; 
 
    left: 50%; 
 
    width: 12px; 
 
    height: 12px; 
 
    background: #d82631 none repeat scroll 0% 0%; 
 
    border-radius: 50%; 
 
    margin-top: -6px; 
 
    margin-left: -6px; 
 
} 
 

 
.kart_dot:hover::before, 
 
.kart_dot:focus::before, 
 
.kart_dot:active::before, 
 
.list-ny:hover ~ .location .dot-ny .kart_dot:before, 
 
.list-wa:hover ~ .location .dot-wa .kart_dot:before { 
 
    background-color: #000; 
 
    -webkit-transition: all 0.20s ease-in-out !important; 
 
    -moz-transition: all 0.20s ease-in-out !important; 
 
    -ms-transition: all 0.20s ease-in-out !important; 
 
    -o-transition: all 0.20s ease-in-out !important; 
 
    width: 18px; 
 
    height: 18px; 
 
    margin-top: -9px; 
 
    margin-left: -9px; 
 
} 
 

 
[data-tooltip]:before, 
 
[data-tooltip]:after, 
 
.tooltip:before, 
 
.tooltip:after { 
 
    position: absolute; 
 
    visibility: hidden; 
 
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; 
 
    filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=0); 
 
    opacity: 0; 
 
    -webkit-transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, -webkit-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24); 
 
    -moz-transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, -moz-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24); 
 
    transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24); 
 
    -webkit-transform: translate3d(0, 0, 0); 
 
    -moz-transform: translate3d(0, 0, 0); 
 
    transform: translate3d(0, 0, 0); 
 
    pointer-events: none; 
 
} 
 

 
[data-tooltip]:hover:before, 
 
[data-tooltip]:hover:after, 
 
[data-tooltip]:focus:before, 
 
[data-tooltip]:focus:after, 
 
.tooltip:hover:before, 
 
.tooltip:hover:after, 
 
.tooltip:focus:before, 
 
.tooltip:focus:after, 
 
.list-ny:hover ~ .location .dot-ny:before, 
 
.list-ny:hover ~ .location .dot-ny:after, 
 
.list-wa:hover ~ .location .dot-wa:before, 
 
.list-wa:hover ~ .location .dot-wa:after { 
 
    visibility: visible; 
 
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; 
 
    filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=100); 
 
    opacity: 1; 
 
} 
 

 
.tooltip:after, 
 
[data-tooltip]:after { 
 
    z-index: 1000; 
 
    padding: 15px; 
 
    width: 160px; 
 
    color: #000; 
 
    content: attr(data-tooltip); 
 
    font-size: 14px; 
 
    line-height: 0.9; 
 
} 
 

 
.tooltip-hoyre:before, 
 
.tooltip-hoyre:after { 
 
    bottom: 50%; 
 
    left: 100%; 
 
} 
 

 
.tooltip-hoyre:before { 
 
    margin-bottom: 0; 
 
    margin-left: -8px; 
 
    border-top-color: transparent; 
 
    border-right-color: #000; 
 
    border-right-color: hsla(0, 0%, 20%, 0.9); 
 
} 
 

 
.tooltip-hoyre:hover:before, 
 
.tooltip-hoyre:hover:after, 
 
.tooltip-hoyre:focus:before, 
 
.tooltip-hoyre:focus:after, 
 
.list-ny:hover ~ .location .dot-ny:before, 
 
.list-ny:hover ~ .location .dot-ny:after, 
 
.list-wa:hover ~ .location .dot-wa:before, 
 
.list-wa:hover ~ .location .dot-wa:after { 
 
    -webkit-transform: translateX(12px); 
 
    -moz-transform: translateX(12px); 
 
    transform: translateX(12px); 
 
} 
 

 
.tooltip-hoyre:after { 
 
    margin-left: 0; 
 
    margin-bottom: -16px; 
 
    margin-left: -18px; 
 
}
<div class="list-ny"><a href="#new_york">New York</a></div> 
 
<div class="list-wa"><a href="#washington">Washington</a></div> 
 

 
<div class="location" style="top: 20%; left: 20%;"> 
 
    <a href="#new_york" class="tooltip-hoyre dot-ny" data-tooltip="New York"> 
 
    <div class="kart_dot"></div> 
 
    </a> 
 
</div> 
 

 
<div class="location" style="top: 38%; left: 20%;"> 
 
    <a href="#washington" class="tooltip-hoyre dot-wa" data-tooltip="Washington"> 
 
    <div class="kart_dot"></div> 
 
    </a> 
 
</div>

+1

这真是太棒了。我希望这是可能的纯CSS,它是。谢谢一堆! – TNF

1

乔恩的答案是好的,但如果你有很多的城市,你可以尝试矿用jQuery。

$('.city a').mouseover(function() { 
 
    $('.location').find('a[href="'+$(this).attr('href')+'"]').addClass('hovered'); 
 
    }).mouseleave(function() { 
 
     $('.location').find('a[href="'+$(this).attr('href')+'"]').removeClass('hovered'); 
 
    });
a { 
 
      text-decoration: none; 
 
     } 
 
     a:hover { 
 
      color: #d82631; 
 
     } 
 

 
     .location { 
 
      position: absolute; 
 
     } 
 

 
     .kart_dot { 
 
      position: relative; 
 
      width: 20px; 
 
      height: 20px; 
 
      margin-top: -10px; 
 
      margin-left: -10px; 
 
      cursor: pointer; 
 
     } 
 

 
     .kart_dot::before { 
 
      display: block; 
 
      content: ""; 
 
      position: absolute; 
 
      top: 50%; 
 
      left: 50%; 
 
      width: 12px; 
 
      height: 12px; 
 
      background: #d82631 none repeat scroll 0% 0%; 
 
      border-radius: 50%; 
 
      margin-top: -6px; 
 
      margin-left: -6px; 
 
     } 
 

 
     .kart_dot:hover::before, 
 
     .kart_dot:focus::before, 
 
     .hovered .kart_dot::before, 
 
     .kart_dot:active::before { 
 
      background-color: #000; 
 
      -webkit-transition: all 0.20s ease-in-out !important; 
 
      -moz-transition: all 0.20s ease-in-out !important; 
 
      -ms-transition: all 0.20s ease-in-out !important; 
 
      -o-transition: all 0.20s ease-in-out !important; 
 
      width: 18px; 
 
      height: 18px; 
 
      margin-top: -9px; 
 
      margin-left: -9px; 
 
     } 
 

 
     [data-tooltip]:before, 
 
     [data-tooltip]:after, 
 
     .tooltip:before, 
 
     .tooltip:after { 
 
      position: absolute; 
 
      visibility: hidden; 
 
      -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; 
 
      filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=0); 
 
      opacity: 0; 
 
      -webkit-transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, -webkit-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24); 
 
      -moz-transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, -moz-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24); 
 
      transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24); 
 
      -webkit-transform: translate3d(0, 0, 0); 
 
      -moz-transform: translate3d(0, 0, 0); 
 
      transform: translate3d(0, 0, 0); 
 
      pointer-events: none; 
 
     } 
 

 
     [data-tooltip]:hover:before, 
 
     [data-tooltip]:hover:after, 
 
     [data-tooltip]:focus:before, 
 
     [data-tooltip]:focus:after, 
 
     .tooltip:hover:before, 
 
     .tooltip:hover:after, 
 
     .tooltip:focus:before, 
 
     .hovered:before, 
 
     .hovered:after, 
 
     .tooltip:focus:after { 
 
      visibility: visible; 
 
      -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; 
 
      filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=100); 
 
      opacity: 1; 
 
     } 
 

 
     .tooltip:after, 
 
     [data-tooltip]:after { 
 
      z-index: 1000; 
 
      padding: 15px; 
 
      width: 160px; 
 
      color: #000; 
 
      content: attr(data-tooltip); 
 
      font-size: 14px; 
 
      line-height: 0.9; 
 
     } 
 

 
     .tooltip-hoyre:before, 
 
     .tooltip-hoyre:after { 
 
      bottom: 50%; 
 
      left: 100%; 
 
     } 
 

 
     .tooltip-hoyre:before { 
 
      margin-bottom: 0; 
 
      margin-left: -8px; 
 
      border-top-color: transparent; 
 
      border-right-color: #000; 
 
      border-right-color: hsla(0, 0%, 20%, 0.9); 
 
     } 
 

 
     .tooltip-hoyre:hover:before, 
 
     .tooltip-hoyre:hover:after, 
 
     .tooltip-hoyre:focus:before, 
 
     .tooltip-hoyre:focus:after, 
 
     .hovered:before, 
 
     .hovered:after{ 
 
      -webkit-transform: translateX(12px); 
 
      -moz-transform: translateX(12px); 
 
      transform: translateX(12px); 
 
     } 
 

 
     .tooltip-hoyre:after { 
 
      margin-left: 0; 
 
      margin-bottom: -16px; 
 
      margin-left: -18px; 
 
     }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="list-ny city"><a href="#new_york">New York</a></div> 
 
<div class="list-wa city"><a href="#washington">Washington</a></div> 
 

 
<div class="location" style="top: 20%; left: 20%;"> 
 
    <a href="#new_york" class="tooltip-hoyre dot-ny" data-tooltip="New York"> 
 
     <div class="kart_dot"></div> 
 
    </a> 
 
</div> 
 

 
<div class="location" style="top: 38%; left: 20%;"> 
 
    <a href="#washington" class="tooltip-hoyre dot-wa" data-tooltip="Washington"> 
 
     <div class="kart_dot"></div> 
 
    </a> 
 
</div>

+0

这很好。至于现在我不知道这个项目会有多少城市,所以我非常感谢你的jQuery贡献。非常感谢Andriy! – TNF