javascript - 将子元素悬停在原型(prototype)中时失去对父元素的焦点

标签 javascript css prototypejs

我有一个div,当我将鼠标悬停在它上面时,我有一个子div(另一个div)要进行动画处理,但是当我将鼠标悬停在子div上时,父div会失去焦点,并且子元素会开始动画回来,就像我离开一样父级 div。

这是我正在使用的代码:

$$(".slide .item").each(function (element) {
    element.observe('mouseover', function (event) {
        element.writeAttribute('doing_animation', 'true');
        element.down('.meta').morph('margin: 103px 0 0;', {
            duration: 0.25,
            afterFinish: function (event) {
                element.writeAttribute('doing_animation', 'false');
            }
        });
    });
    element.observe('mouseout', function (event) {
        setTimeout(function () {
            element.down('.meta').morph('margin: 169px 0 0;', {
                duration: 0.25
            });
        }, 250);
    });
});

这是标记:

<div class="item">
    <div class="meta">
        <h3><a href="#">Space Kitty Needz Moar Balls</a></h3>
        <ul>
            <li>From: <a href="#">Jeffdoe</a></li>
            <li>Posted: 20 minutes ago</li>
            <li>Views: 249,209</li>
        </ul>
    </div>
    <img src="images/tmp/kitty.png" alt="" />
</div>

因此,对于代码,我想将鼠标悬停在 .item.item .meta 上,并且 .meta div 仍将控制焦点.item div 的。我知道 jQuery 在这方面做得更好,但我需要使用 Prototype。

谢谢!

最佳答案

我的做法是这样的:

$$(".slide .item").each(function (element) {
    element.observe('mouseover', function (event) {
        var relatedTarget = $(event.relatedTarget || event.fromElement);
        var target = Event.element(event);
        if ((target == element || Element.descendantOf(target, element))
            && !((relatedTarget == element) || Element.descendantOf(relatedTarget, element)))
        {
            element.writeAttribute('doing_animation', 'true');
            element.down('.meta').morph('margin: 103px 0 0;', {
                duration: 0.25,
                afterFinish: function (event) {
                    element.writeAttribute('doing_animation', 'false'); 
                }
            });
        }
    });
    element.observe('mouseout', function (event) {
        var relatedTarget = $(event.relatedTarget || event.fromElement);
        var target = Event.element(event);
        if ((target == element || Element.descendantOf(target, element))
            && !((relatedTarget == element) || Element.descendantOf(relatedTarget, element)))
        {
            setTimeout(function () {
                element.down('.meta').morph('margin: 169px 0 0;', {
                    duration: 0.25
                });
            }, 250);
        }
    });
});

你可以看到我刚刚添加了一个包装器

    var relatedTarget = $(event.relatedTarget || event.fromElement);
    var target = Event.element(event);
    if ((target == element || Element.descendantOf(target, element))
        && !((relatedTarget == element) || Element.descendantOf(relatedTarget, element)))
    {
        ...
    }

围绕你的事件处理程序。因此,只有当我们确实移入或移出父容器时,才将其视为“真正的”鼠标移入或鼠标移出。

希望有帮助。

关于javascript - 将子元素悬停在原型(prototype)中时失去对父元素的焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1132487/

相关文章:

CSS 多 DIV 布局不垂直扩展

javascript - 检查用户是否使用 FB.ui 在共享对话框中发布(或取消)共享到 Facebook

javascript - 保护多个范围时,Google Apps 脚本运行时间非常慢

javascript - super 菜单 - 无法在悬停时选择子元素

javascript - 猫头鹰旋转木马 |如何使用 CSS 更改 .Item 的大小

javascript - 从 jquery 转换为原型(prototype)

javascript - 原型(prototype) 1.6.0+ 相当于 'document.getElementsByClassName' 是什么?

jquery - jquery 中是否有原型(prototype)序列化()的等效项

javascript - 这是什么 comboBox 或 dropDownList?

javascript - RxJs:有 observable 由 2 个独立的 observables 触发