Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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_Mouseevent - Fatal编程技术网

Javascript 鼠标悬停会导致意外行为

Javascript 鼠标悬停会导致意外行为,javascript,jquery,mouseevent,Javascript,Jquery,Mouseevent,我有一个一行的表,其中列出了一系列的6个按钮。我为每个按钮预加载了12个图像2。每个按钮都以其蓝色图像的版本开始。当用户将鼠标悬停在任何按钮上时,图像将切换到绿色版本。当鼠标离开按钮时,它会变回蓝色。那部分很好用。差不多 如果我的鼠标动作“正常”,一切都很好。但在测试中,如果我开始随机快速移动鼠标,我几乎可以立即生成一个情况,鼠标离开事件会导致按钮保持绿色。这永远不应该发生。绿色图像应仅在鼠标悬停在按钮上时显示 我是jQuery新手,不知道自己做错了什么。有人能看到吗?谢谢 关于CSS3的注意:

我有一个一行的表,其中列出了一系列的6个按钮。我为每个按钮预加载了12个图像2。每个按钮都以其蓝色图像的版本开始。当用户将鼠标悬停在任何按钮上时,图像将切换到绿色版本。当鼠标离开按钮时,它会变回蓝色。那部分很好用。差不多

如果我的鼠标动作“正常”,一切都很好。但在测试中,如果我开始随机快速移动鼠标,我几乎可以立即生成一个情况,鼠标离开事件会导致按钮保持绿色。这永远不应该发生。绿色图像应仅在鼠标悬停在按钮上时显示

我是jQuery新手,不知道自己做错了什么。有人能看到吗?谢谢


关于CSS3的注意:我在这篇文章中稍微简化了这个问题。在真实版本中,每个按钮都可以以蓝色或绿色图像开始,因此我需要在翻转之前测试显示的图像。我不认为CSS3可以做到这一点,但如果我错了,我会接受CSS3解决方案

$("#menu_row").find('button').hover(
    function() {flipColor(event.target.id);}
);

function flipColor(btn_id) {

    var image = $('#'+btn_id).find('img').get(0);

    switch (btn_id) {

        case 'btn_home' :
            if (image.src == home_green.src)
                image.src = home_blue.src;
            else image.src = home_green.src;
            break;

        case 'btn_capabilities' :
            if (image.src == capabilities_green.src) 
                image.src = capabilities_blue.src;
            else image.src = capabilities_green.src;
            break;

        case 'btn_beliefs' :
            if (image.src == beliefs_green.src) 
                image.src = beliefs_blue.src;
            else image.src = beliefs_green.src;
            break;

        case 'btn_biography' :
            if (image.src == biography_green.src) 
                image.src = biography_blue.src;
            else image.src = biography_green.src;
            break;

        case 'btn_experience' :
            if (image.src == experience_green.src) 
                image.src = experience_blue.src;
            else image.src = experience_green.src;
            break;

        case 'btn_contact' :
            if (image.src == contact_green.src) 
                image.src = contact_blue.src;
            else image.src = contact_green.src;
            break;
    }
}
以下是HTML:

<table><tr id='menu_row'>
    <td id='home'>
        <button id='btn_home' class='active'>
            <img src="images/home_blue.png">
        </button>
    </td>

    <td id='capabilities'>
        <button id='btn_capabilities'>
            <img src="images/capabilities_blue.png">
        </button>
    </td>

    <td id='beliefs'>
        <button id='btn_beliefs'>
            <img src="images/beliefs_blue.png">
        </button>
    </td>

    <td id='biography'>
        <button id='btn_biography'>
            <img src="images/biography_blue.png">
        </button>
    </td>

    <td id='experience'>
        <button id='btn_experience'>
            <img src="images/experience_blue.png">
        </button>
    </td>

    <td>
        <button id='btn_contact'>
            <img src="images/contact_blue.png">
        </button>
    </td>
</tr></table>

为什么不使用CSS3解决这个问题呢?我在这篇文章中稍微简化了这个问题。在真实版本中,每个按钮都可以以蓝色或绿色图像开始,因此我需要在翻转之前测试显示的图像。我不认为CSS3可以做到这一点,是吗?嗯,我正在考虑更改映像的类,而不是更改src。这是个好主意。我的问题是,我是否仍然可以用这种方式预加载图像。如果鼠标悬停事件必须进行网络调用以获取替换映像,则它不可能有足够的响应。映像有多大?如果它们相当小,则使用精灵,即单个大图像和以行/线圈排列的各种图像。然后,您只需使用类,例如使用toggleClass和CSS样式来更改其中的图像偏移。