滑出带有关闭按钮的移动跨度

slide out span with close button for mobile

我是 运行 一个 linkedin 脚本,可以查看一些会员个人资料信息。 它位于桌面的最右侧,如果您将鼠标悬停在它上面,它就会出现在桌面上。 在手机上需要点击它,因为悬停不起作用!所以我做了一个带有关闭按钮的例子,这样用户就知道如何最小化它。

但是当你点击它时我无法隐藏关闭按钮

这是我的代码

<div id="social">
<div id="block-wrapper">
    <div id="linked-close"></div>
    <div id="linked-block">
        <p>Btn</p>
        <span class="hidden">

        </span>
    </div>
</div>

CSS:

#social{
position: fixed;
top: 80px;
right:0;
}

#block-wrapper #linked-block{
height: 70px;
width: 80px;
background-color: #0076B7;
color: #fff;
font-size: 32px;
text-align: center;
-webkit-border-top-left-radius: 5px;
-webkit-border-bottom-left-radius: 5px;
-moz-border-radius-topleft: 5px;
-moz-border-radius-bottomleft: 5px;
}

#social #block-wrapper #linked-block span{
position: absolute;
-webkit-transition: 1s; /* For Safari 3.1 to 6.0 */
-ms-transition: 1s; /* For Safari 3.1 to 6.0 */
transition: 1s;
width: 364px;
height: 30px;
background-color: red;
}

#social #block-wrapper #linked-block span.hidden{
position: absolute;
-webkit-transition: 1s; /* For Safari 3.1 to 6.0 */
-ms-transition: 1s; /* For Safari 3.1 to 6.0 */
transition: 1s;
width: 364px;
height: 30px;
background-color: red;
right: -370px;
} 

#social #block-wrapper #linked-block span.show{
-webkit-transition: 1s; /* For Safari 3.1 to 6.0 */
-ms-transition: 1s; /* For Safari 3.1 to 6.0 */
transition: 1s;
right: 0;
}

#linked-close{
position: absolute;
top: -55px;
z-index: 999999;
right:314px;
width: 46px;
height: 46px;
background-color: black;
font-size: 40px;
display: none;
}

JQUERY:

$(document).ready(function($) {
 $('#block-wrapper').on('click', function(){
    $("#social #block-wrapper #linked-block span").toggleClass('show'),
    $("#linked-close").css("display", "block");
 });
 $('#linked-close').on('click', function(){
    $("#linked-close").css("display", "none");
 });   
});

也做了一个jsFiddle

你的问题是,如果你点击#link-关闭,你有 2 个事件都被触发。那是因为你的包装器上有一个事件 - 单击关闭会立即触发对#block-wrapper 的单击,因此在你设置 display:none 后,你的关闭元素将立即触发 display:block。

您有两个选择:

如果你想将事件保留在包装器上,你必须像这样停止传播:

$(document).ready(function($) {
  $('#block-wrapper').on('click', function(e){
    $("#social #block-wrapper #linked-block span").toggleClass('show');
    $("#linked-close").css("display", "block");
  });
  $('#linked-close').on('click', function(e){
    e.stopPropagation();
    $("#social #block-wrapper #linked-block span").toggleClass('show');
    $("#linked-close").css("display", "none");
  });   
});

这可能会导致一些问题,具体取决于您的其余代码。可能对你的情况有用...... Fiddle stopping the Propagation

更好的方法是将第一个点击处理程序放在您要点击的实际元素上。在你的情况下它是 <p>Hoi</p>

$(document).ready(function($) {
  $('#linked-block').find('p').on('click', function(e){
    $("#social #block-wrapper #linked-block span").toggleClass('show');
    $("#linked-close").css("display", "block");
  });
  $('#linked-close').on('click', function(){
    $("#social #block-wrapper #linked-block span").toggleClass('show');
    $("#linked-close").css("display", "none");
  });   
});

Fiddle without stopping the propagation