使用jQuery触发css悬停

时间:2017-08-14 21:27:58

标签: javascript jquery html css css3

是否可以使用jQuery(或纯CSS)将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?

2 个答案:

答案 0 :(得分:3)

您可以使用相邻的选择器(.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 )使用纯CSS而不使用jQuery。我已在下面的代码段中实现了它,并且必须添加一些HTML类。以下是一个如何运作的例子:

.list-ny

上面的代码段说明了...如果您将.location菜单项悬停在其中,请选择其中包含.dot-ny:before的相邻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; }元素并应用相关样式。

以下是为所有相关属性实施悬停的完整示例:

&#13;
&#13;
<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>
&#13;
DECLARE @VARX CHAR = 'X';
SELECT * FROM TABLE WHERE TYPE = @VARX;
&#13;
&#13;
&#13;

答案 1 :(得分:1)

Jon的答案很好,但如果你有很多城市,你可以尝试使用jquery。

%o5
$('.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;
        }