当我的孩子<li>
被徘徊时,我想为<a>
添加一个课程,但我似乎无法让它工作。发生的事情是,无论<a>
元素悬停在哪个元素上,只有第一个<li>
受到影响,因此我需要只能定位<li>
的父<a>
目前正在徘徊。
这是我到目前为止所做的:
这是代码:
控制器(Javascript)
var myApp = angular.module('myApp',[]);
myApp.controller("Ctrl", function($scope){
$scope.addClass = function(){
angular.element(document.querySelector('.li-hover')).addClass('hovering');
}
$scope.removeClass = function(){
angular.element(document.querySelector('.li-hover')).removeClass('hovering');
}
});
HTML
<div ng-app='myApp'>
<div ng-controller="Ctrl">
<ul>
<li class="li-hover" >
<a href="" ng-mouseover="addClass()" ng-mouseleave="removeClass()">
<span>Home</span>
</a>
</li>
<li class="li-hover" >
<a href="" ng-mouseover="addClass()" ng-mouseleave="removeClass()">
<span>About</span>
</a>
</li>
<li class="li-hover" >
<a href="" ng-mouseover="addClass()" ng-mouseleave="removeClass()">
<span>Contact</span>
</a>
</li>
</ul>
</div>
</div>
CSS
.hovering {
background-color: pink;
border-bottom: 5px solid red;
}
li {
margin: 1em;
padding: 2em;
border-bottom: 5px solid #aaa;
background: #ccc;
}
a {
background: white;
padding: 0.5em;
}
答案 0 :(得分:1)
您可以使用转发器隔离范围,并更改重复项的属性:
myApp.controller("Ctrl", function($scope) {
$scope.items = [
{
href: '',
title: 'Home',
},
{
href: '',
title: 'About',
},
{
href: '',
title: 'Contact',
}
];
});
然后,您可以在item
上存储over属性,并使用它来更改类:
<ul>
<li ng-repeat="item in items" ng-class="{hovering: item.over}">
<a ng-href="{{item.href}}" title="{{item.title}}" ng-mouseover="item.over=true" ng-mouseleave="item.over=false">
<span>{{item.title}}</span>
</a>
</li>
</ul>
或者您现在可以使用简单的var,因为ng-repeat
指令隔离了新范围中的每个项目:
<ul>
<li ng-repeat="item in items" ng-class="{hovering: over}">
<a ng-href="{{item.href}}" title="{{item.title}}" ng-mouseover="over=true" ng-mouseleave="over=false">
<span>{{item.title}}</span>
</a>
</li>
</ul>
我认为这更好,因为悬停时的造型是一个视角问题。虽然上面的解决方案在当前作用域中设置了hover
属性,但控制器不需要关心这一点。
答案 1 :(得分:0)
您不需要任何js或jQuery代码,您可以使用css :hover
选择器完成此操作。将此添加到您的CSS:
li:hover {
background-color: pink;
border-bottom: 5px solid red;
}
以下是工作示例:http://jsfiddle.net/faGTg/40/