使用AngularJS2中的指令实现按钮的切换效果


Posted in Javascript onMarch 27, 2017

使用AngularJS2中的指令实现按钮的切换效果 

之前在AngularJS2中一种button切换效果的实现(二)中实现了按钮的切换效果,但是方法比较low,这次我们使用Angular2的指令来实现。

指令实现hover效果

import { Directive, ElementRef, HostListener, Input } from '@angular/core';
@Directive({
 selector: '[myHighlight]'
})
export class HighlightDirective {
 constructor(private el: ElementRef) { }
 @HostListener('mouseenter') onMouseEnter() {
 this.highlight('red');
 }
 @HostListener('mouseleave') onMouseLeave() {
 this.highlight(null);
 }
 private highlight(color: string) {
 this.el.nativeElement.style.backgroundColor = color;
 }
}
<button myHighlight class="btn">按钮一</button>
<button myHighlight class="btn">按钮二</button>
<button myHighlight class="btn">按钮三</button>
.btn{
 height: 50px;
 width: 100px;
 background-color: #3399ff;
 color: white;
 border: 0;
 outline: 0;
 cursor: hand;
}

hover的效果直接参考Angular官网的代码。

使用AngularJS2中的指令实现按钮的切换效果 

指令实现click效果

import { Directive, ElementRef, HostListener, Input } from '@angular/core';
@Directive({
 selector: '[myHighlight]'
})
export class HighlightDirective {
 constructor(private el: ElementRef) { }
 @HostListener('click') onMouseClick() {
 this.clickhighlight("black");
 }
 private clickhighlight(color: string) {
 let obj = this.el.nativeElement;
 let btns = obj.parentNode.children;
 //背景色全部重置
 for(let i=0; i<btns.length; i++){
 btns[i].style.backgroundColor = "#3399ff";
 }
 //设置当前点击对象的背景色
 obj.style.backgroundColor = color;
 }
}
<div>
<button myHighlight class="btn">按钮一</button>
<button myHighlight class="btn">按钮二</button>
<button myHighlight class="btn">按钮三</button>
</div>
.btn{
 height: 50px;
 width: 100px;
 background-color: #3399ff;
 color: white;
 border: 0;
 outline: 0;
 cursor: hand;
}

click效果仍然用@HostListener装饰器引用属性型指令的宿主元素,首先把所有button的背景颜色重置,然后再设置当前点击对象的背景颜色,这样就达到了点击后背景颜色变化的效果。

使用AngularJS2中的指令实现按钮的切换效果 

指令实现click加hover效果

import { Directive, ElementRef, HostListener, Input } from '@angular/core';
@Directive({
 selector: '[myHighlight]'
})
export class HighlightDirective {
 constructor(private el: ElementRef) { }
 @HostListener('click') onMouseClick() {
 this.clickhighlight("black");
 }
 private clickhighlight(color: string) {
 let obj = this.el.nativeElement;
 let btns = obj.parentNode.children;
 //背景色全部重置
 for(let i=0; i<btns.length; i++){
 btns[i].style.backgroundColor = "#3399ff";
 }
 //设置当前点击对象的背景色
 obj.style.backgroundColor = color;
 }
}
<div>
<button myHighlight class="btn">按钮一</button>
<button myHighlight class="btn">按钮二</button>
<button myHighlight class="btn">按钮三</button>
</div>
.btn{
 height: 50px;
 width: 100px;
 background-color: #3399ff;
 color: white;
 border: 0;
 outline: 0;
 cursor: hand;
}
.btn:hover{
 background: black !important;
}

配合上文click效果,只要加上一行css代码就可以实现click和hover的组合效果,此处务必使用hover伪类,并用!important来提升样式的优先级,如果用@HostListener装饰器,mouseenter、mouseleave、click三者会打架:

使用AngularJS2中的指令实现按钮的切换效果 

以上所述是小编给大家介绍的使用AngularJS2中的指令实现按钮的切换效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
另类调用flash无须激活的方法
Dec 27 Javascript
html 锁定页面(js遮罩层弹出div效果)
Oct 27 Javascript
Html中JS脚本执行顺序简单举例说明
Jun 19 Javascript
使用js判断控件是否获得焦点
Jan 03 Javascript
js分页代码分享
Apr 28 Javascript
在Python中使用glob模块查找文件路径的方法
Jun 17 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
Jul 14 Javascript
js 创建对象 经典模式全面了解
Aug 16 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
Aug 25 Javascript
ajax的分页查询示例(不刷新页面)
Jan 11 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
Dec 21 Javascript
用Node编写RESTful API接口的示例代码
Jul 04 Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 #Javascript
vue2.0实战之使用vue-cli搭建项目(2)
Mar 27 #Javascript
js实现三级联动效果(简单易懂)
Mar 27 #Javascript
JS数组去重(4种方法)
Mar 27 #Javascript
JS实现隔行换色的表格排序
Mar 27 #Javascript
JavaScript实现获取远程的html到当前页面中
Mar 26 #Javascript
axios学习教程全攻略
Mar 26 #Javascript
You might like
php Ajax乱码
2008/04/09 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
2014/07/18 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
ie下动态加态js文件的方法
2011/09/13 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
JavaScript闭包实例详解
2016/06/03 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
python中类的一些方法分析
2014/09/25 Python
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
python_mask_array的用法
2020/02/18 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
文明生主要事迹
2014/05/25 职场文书
市场营销策划方案
2014/06/11 职场文书
无房证明范本
2014/09/17 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript