Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为不同的对象切换相同的对象?_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 如何为不同的对象切换相同的对象?

Javascript 如何为不同的对象切换相同的对象?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,事实上,我真的不知道如何表达我的问题 你们可以看到我的答案,这样你们就会了解这个问题 正如您在fiddle中看到的,当我单击第一个图像时,弹出窗口会出现,但当我单击另一个图像时,弹出窗口会隐藏。我知道这是切换效果,但当我单击第二个图像时,如果我想切换什么,那么第一个切换应该切换,而不是其他应该启动 我的代码 <div id='player-back'> <img src='http://s6.postimg.org/su0e7812l/player1.png'

事实上,我真的不知道如何表达我的问题

你们可以看到我的答案,这样你们就会了解这个问题

正如您在fiddle中看到的,当我单击第一个图像时,弹出窗口会出现,但当我单击另一个图像时,弹出窗口会隐藏。我知道这是切换效果,但当我单击第二个图像时,如果我想切换什么,那么第一个切换应该切换,而不是其他应该启动

我的代码

    <div id='player-back'>
    <img src='http://s6.postimg.org/su0e7812l/player1.png' data-playerid="1" id='p1'/>
    <img src='http://s6.postimg.org/afpv38orx/player2.png' data-playerid="2" id='p2'/>
    <img src='http://s6.postimg.org/h7ga63drh/player3.png' data-playerid="3" id='p3'/>
    <div id='player-popup' style="display:none">
            <span>Player1</span>
    </div>
    </div>

$("img").click(function(){
    var top = $(this).offset().top + $(this).width() + 2;
    var left = $(this).offset().left - $(this).height() / 2;  
    $("#player-popup span").text("Player "+$(this).data("playerid")); 
    $("#player-popup").css({ top: top, left: left }).toggle('slow');

});


#player-back{
    height:250px; 
    background:#0F0;
}
#p1{
    margin-top:50px;
    margin-left:80px;
}
#p2{
    margin-left:150px;
}
#p3{
    margin-left:200px;
}
#player-popup{
    background:orange;
    height:27px;
    width:85px;
    border-radius:10px;
    text-align:center;
    position:absolute;
}

玩家1
$(“img”)。单击(函数(){
var top=$(this.offset().top+$(this.width()+2;
var left=$(this.offset().left-$(this.height()/2;
$(“#播放器弹出span”).text(“播放器”+$(此).data(“playerid”);
$(“#播放器弹出”).css({top:top,left:left}).toggle('slow');
});
#球员后卫{
高度:250px;
背景:#0F0;
}
#p1{
边缘顶部:50px;
左边距:80px;
}
#p2{
左边距:150像素;
}
#p3{
左边距:200px;
}
#播放器弹出窗口{
背景:橙色;
高度:27px;
宽度:85px;
边界半径:10px;
文本对齐:居中;
位置:绝对位置;
}
尝试执行以下操作:

hide()
与回调函数()一起使用

这意味着显示将在隐藏结束时开始。

尝试以下操作:

var playerId = '';
$("img").click(function(){
    var top = $(this).offset().top + $(this).width() + 2;
    var left = $(this).offset().left - $(this).height() / 2;  
    $("#player-popup span").text("Player "+$(this).data("playerid")); 
    if(playerId !=$(this).data("playerid") && $("#player-popup").css('display') != 'none'){
        $("#player-popup").css('display','none');
        playerId = $(this).data("playerid");
    }
    $("#player-popup").css({ top: top, left: left }).toggle('slow');

});
我已经添加了一个if条件,如果在不同的玩家上有点击,那么它将隐藏其他玩家并显示当前玩家


.

只需在单击时首先隐藏工具提示

$("img").click(function(){
    $("#player-popup").hide();
    var top = $(this).offset().top + $(this).width() + 2;
    var left = $(this).offset().left - $(this).height() / 2;  
    $("#player-popup span").text("Player "+$(this).data("playerid")); 
    $("#player-popup").css({ top: top, left: left }).toggle('slow');

});
检查此工作演示

您需要在切换之前隐藏弹出窗口,以防在一个对象之后单击其他对象。所以您可以将以前单击的对象存储在变量中,如

var prevObj = null;
$("img").click(function(){    
    var top = $(this).offset().top + $(this).width() + 2;
    var left = $(this).offset().left - $(this).height() / 2;  
    $("#player-popup span").text("Player "+$(this).data("playerid")); 

    if(prevObj != this)
        $("#player-popup").hide();
    $("#player-popup").css({ top: top, left: left }).toggle('slow');    
    prevObj = this;
});

我编辑了链接,但当你查看代码时,你会发现,首先它会隐藏这个弹出窗口,无论它是否可见,然后设置位置并显示在这个新位置,并使用我所说的新文本,当你点击播放器图像时,它会显示一个弹出窗口,当你再次点击它时,它应该隐藏,但它会隐藏,但再次显示OK,我现在明白了。检查已编辑的代码。只需在弹出窗口中存储额外数据,还有其他方法代替隐藏和显示吗?这是我关心的问题。你的问题得到了多方面的正确回答。你应该不厌其烦地接受合适的一个:)在你的演示中,同样的事情正在发生,当我第二次单击图像时,它被隐藏并再次弹出。根据我的理解,你想要这种效果。第一个工具提示应该隐藏,然后下一个应该可见。是的,但它应该像切换一样工作,即当我第一次单击图像时弹出窗口应该出现,当我单击同一图像时弹出窗口应该消失。这不是你的情况。我希望你明白我的意思
var prevObj = null;
$("img").click(function(){    
    var top = $(this).offset().top + $(this).width() + 2;
    var left = $(this).offset().left - $(this).height() / 2;  
    $("#player-popup span").text("Player "+$(this).data("playerid")); 

    if(prevObj != this)
        $("#player-popup").hide();
    $("#player-popup").css({ top: top, left: left }).toggle('slow');    
    prevObj = this;
});