首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ng-style设置样式后,在悬停时更改背景颜色

使用ng-style设置样式后,在悬停时更改背景颜色
EN

Stack Overflow用户
提问于 2013-01-01 04:33:06
回答 3查看 22.1K关注 0票数 12

我有一个单词列表,每个单词都有一个编号(streak)。我使用AngularJS的ng样式根据分配给它的数字设置每个单词的背景颜色。

html

代码语言:javascript
复制
   <ul class="unstyled">
     <li class="tHi" ng-repeat="item in items" ng-click="getEdit(item.word)" ng-style="bgstyle(item.streak)">
       <span>{{item.word}} {{item.streak}}</span>
     </li>
   </ul>

从ng样式调用的javascript。

代码语言:javascript
复制
$scope.bgstyle = function (streak) {
    var red = 255;
    var green = 255-streak;
    var blue = 255-streak;
    var rgb = blue | (green << 8) | (red << 16);
    var sColor = '#' + rgb.toString(16);
    return {backgroundColor: sColor};
}

这是可行的,但是,我希望当鼠标悬停在一个单词上时,背景会突出显示。我添加了一个类"tHi“,它通常会改变悬停时的背景,但它被添加的样式覆盖了。

这是一个演示此问题的jsfiddle

有没有比ng-style更好的方法来设置背景,使其与分配给每个单词的数字相对应?或者,当用户将鼠标悬停在某个单词上时,有什么方法可以突出显示吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-01 04:44:57

这是我真正建议在CSS中使用!important的极少数情况之一:

代码语言:javascript
复制
.tHi:hover {
    cursor: pointer;
    background-color: #9f9 !important;
}

Updated JS Fiddle demo

使用!important关键字本质上会导致应用规则,而不考虑选择器的特殊性(当然,假设更具体的选择器没有!important关键字)。但是,如果您或您的同事忘记了!important的使用,那么它确实有可能使调试变得非常困难。

参考文献:

  • !important.
票数 15
EN

Stack Overflow用户

发布于 2013-01-01 05:55:37

如果不想使用!important,可以使用ng-mouseover动态添加类

代码语言:javascript
复制
 <li ng-repeat="item in items" ng-click="getEdit(item.word)" 
    ng-style="bgstyle(item.streak)" ng-mouseover="hover($event)">

然后添加到您的控制器:

代码语言:javascript
复制
$scope.hover = function(e) {
    angular.element(e.srcElement).addClass('tHi')
}

在控制器中操作DOM不是“最佳实践”。一个指令会更好。

更新:这里有一个指令

代码语言:javascript
复制
myApp.directive('ngHover', function() {
  return {
    link: function(scope, element) {
       element.bind('mouseenter', function() {
          angular.element(element.children()[0]).addClass('tHi')
       })
    }
  }
});

children()[0]用于将类应用于跨度,而不是li,以避免与ng样式冲突。

使用方法如下:

代码语言:javascript
复制
<li ng-repeat="item in items" ng-click="getEdit(item.word)"
  ng-style="bgstyle(item.streak)" ng-hover>

Fiddle

票数 10
EN

Stack Overflow用户

发布于 2013-04-22 09:36:43

我发现通过指令是最简单的方法。

代码语言:javascript
复制
App.directive('attr', function(){
    return function(scope, element) {
        element.bind('mouseenter', function(){
            element.addClass('hover');
        }).bind('mouseleave', function(){
          element.removeClass('hover');
        })
    }
})
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14105845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档