热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用Knockout.js在鼠标悬停时更改CSS类?

如何解决《如何使用Knockout.js在鼠标悬停时更改CSS类?》经验,为你挑选了1个好方法。

我有一个由Knockout.js foreach数据绑定填充的图像网格.默认情况下,网格中的每个图像都有一个由背景颜色设置的黑色轮廓.当用户将鼠标悬停在每个图像上时,我希望该轮廓变为白色以表示它已被突出显示.

目前,我正在使用两个事件处理程序,一个用于mouseenter,一个用于mouseleave.
第一个将图像的CSS类更改为具有白色背景的类.后者将其改回黑色.但是,当鼠标进入图像时,两者都被调用(通过调试确认),因此不会看到任何变化.

的HTML如下:(注:每个图像具有fileName表示图像文件的位置属性有两种.CSS类调用blackwhite,一个用于每个高亮状态.)

正如你所看到的,我现在不是以非常优雅的方式做这件事.我将每个元素绑定id到其唯一的fileName属性.然后我将fileName传递给事件处理程序,以便id可以访问该元素以更改CSS类.

(A)为什么都mouseentermouseleave被当鼠标进入的图像称为?

(B)实现所需突出显示功能的简单方法是什么?



1> Tomalak..:

Knockout的目的是通过绑定处理程序以声明方式将视图(您的HTML)连接到您的viewmodel(Javascript对象).但是,并非每个可能的DOM到视图模型交互都具有预定义的绑定处理程序.

在您的特定情况下(更改样式),您只需使用:hoverCSS伪类.但是你的viewmodel不会注意到这一点.

因此,如果您想要更改不同的属性以响应鼠标移动(例如文本),您可以event"手动" 使用绑定 - 或者您可以创建一个简单的自定义绑定处理程序来设置视图模型的一个属性对mouseentermouseleave事件的反应.

自定义绑定处理程序的优点是您现在拥有一个基于其他行为的实际observable.而且您在视图中输入的内容较少.

ko.bindingHandlers.hover = {
    init: function (element, valueAccessor) {
        var value = valueAccessor();
        ko.applyBindingsToNode(element, {
            event: {
                mouseenter: function () { value(true) },
                mouseleave: function () { value(false) }
            }
        });
    }
}

function Item() {
  this.isHovering = ko.observable(false);
}

ko.applyBindings({
  items: [
    new Item(),
    new Item(),
    new Item(),
    new Item(),
    new Item()
  ]
});
div.item {
  float: left;
  width: 50px;
  height: 50px;
  line-height: 50px;
  text-align: center;
  border: 1px solid black;
  margin: 0 5px 5px 0;
}
div.item.active {
  border-color: red;
}



推荐阅读
author-avatar
11
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有