使用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 相关文章推荐
JS面向对象编程 for Cookie
Sep 19 Javascript
Js 时间间隔计算的函数(间隔天数)
Nov 15 Javascript
jquery选择器之层级过滤选择器详解
Jan 27 Javascript
jQuery中$.click()无效问题分析
Jan 29 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
Mar 27 Javascript
ajax+jQuery实现级联显示地址的方法
May 06 Javascript
浅谈JavaScript中的Math.atan()方法的使用
Jun 14 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
May 10 Javascript
vue 的keep-alive缓存功能的实现
Mar 22 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
Vue 开发必须知道的36个技巧(小结)
Oct 09 Javascript
解决vue字符串换行问题(绝对管用)
Aug 06 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 heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
php 常用类汇总 推荐收藏
2010/05/13 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
如何判断Javascript对象是否存在的简单实例
2016/05/18 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python实现提取文章摘要的方法
2015/04/21 Python
Zabbix实现微信报警功能
2016/10/09 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
python3将变量输入的简单实例
2020/08/19 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
学生上课迟到检讨书
2015/01/01 职场文书
关于召开会议的通知
2015/04/15 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
Oracle11g R2 安装教程完整版
2021/06/04 Oracle