使用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 相关文章推荐
JavaScript 存在陷阱 删除某一区域所有节点
May 10 Javascript
javascript静态页面传值的三种方法分享
Nov 12 Javascript
Jquery中的层次选择器与find()的区别示例介绍
Feb 20 Javascript
浅谈$(document)和$(window)的区别
Jul 15 Javascript
轻松实现js弹框显示选项
Sep 13 Javascript
ES5 ES6中Array对象去除重复项的方法总结
Apr 27 Javascript
vue resource post请求时遇到的坑
Oct 19 Javascript
Vue核心概念Action的总结
Jan 18 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
Jul 09 Javascript
详解Nuxt内导航栏的两种实现方式
Apr 16 Javascript
JS图片懒加载技术实现过程解析
Jul 27 Javascript
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 Vue.js
详解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调用Google translate_tts api实现代码
2013/08/07 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
Python遍历字典方式就实例详解
2019/12/28 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
C#的几个面试问题
2016/05/22 面试题
采购文员岗位职责
2013/11/20 职场文书
小学数学教学反思
2014/02/02 职场文书
小组名称和口号
2014/06/09 职场文书
工程索赔意向书
2014/08/30 职场文书
爱国影片观后感
2015/06/18 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python