使用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 form 验证函数 弹出对话框形式
Jun 23 Javascript
javascript getElementsByClassName实现代码
Oct 11 Javascript
jquery ui dialog ie8出现滚动条的解决方法
Dec 06 Javascript
一款由jquery实现的整屏切换特效
Sep 15 Javascript
jQuery 如何实现一个滑动按钮开关
Dec 01 Javascript
Vue.Draggable实现拖拽效果
Jul 29 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
Sep 13 Javascript
Angular7创建项目、组件、服务以及服务的使用
Feb 19 Javascript
layui实现三级导航菜单
Jul 26 Javascript
利用d3.js实现蜂巢图表带动画效果
Sep 03 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
浅谈js中的attributes和Attribute的用法与区别
Jul 16 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按百分比生成缩略图的代码分享
2014/05/10 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
JS实现吸顶特效
2020/01/08 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
django框架创建应用操作示例
2019/09/26 Python
python实现飞船大战
2020/04/24 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
项目计划书范文
2014/01/09 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
2014年医务科工作总结
2014/12/18 职场文书
高中班主任评语
2014/12/30 职场文书
机动车交通事故协议书
2015/01/29 职场文书
英文商务邀请函范文
2015/01/31 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
加薪通知
2015/04/25 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
2016暑期政治学习心得体会
2016/01/23 职场文书