使用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 相关文章推荐
返回对象在当前级别中是第几个元素的实现代码
Jan 20 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
Jul 27 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
Jan 04 Javascript
js实现模糊匹配功能
Feb 15 Javascript
jquery实现数字输入框
Feb 22 Javascript
AngularJS ionic手势事件的使用总结
Aug 09 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
Aug 17 Javascript
vue跨域解决方法
Oct 15 Javascript
微信小程序三级联动选择器使用方法
May 19 Javascript
npm 更改默认全局路径以及国内镜像的方法
May 16 Javascript
vue项目动态设置页面title及是否缓存页面的问题
Nov 08 Javascript
VUE 实现复制内容到剪贴板的两种方法
Apr 24 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
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
php数据库连接
2006/10/09 PHP
PHP array 的加法操作代码
2010/07/24 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
Python常用编译器原理及特点解析
2020/03/23 Python
基于python实现操作git过程代码解析
2020/07/27 Python
新颖的化妆品活动方案
2014/08/21 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS