使用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是不是面向对象的语言
Nov 21 Javascript
使用jQuery动态加载js脚本文件的方法
Apr 03 Javascript
JavaScript对数字的判断与处理实例分析
Feb 02 Javascript
javascript通过元素id和name直接取得元素的方法
Apr 28 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
Jun 25 Javascript
Angular4表单验证代码详解
Sep 03 Javascript
基于webpack 实用配置方法总结
Sep 28 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
Jul 09 jQuery
实现elementUI表单的全局验证的方法步骤
Apr 29 Javascript
JS数组Reduce方法功能与用法实例详解
Apr 29 Javascript
Ant Design的Table组件去除
Oct 24 Javascript
Vue如何实现组件间通信
May 15 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中使用Oracle数据库(6)
2006/10/09 PHP
PHP 反向排序和随机排序代码
2010/06/30 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
for 循环性能比较 提高for循环的效率
2009/03/19 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
Vue框架之goods组件开发详解
2018/01/25 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
python实现文本文件合并
2015/12/29 Python
python基于http下载视频或音频
2018/06/20 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
2019/08/30 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
给客户的道歉信
2014/01/13 职场文书
教师个人自我鉴定
2014/02/08 职场文书
求职信怎么写
2014/05/23 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
奠基仪式致辞
2015/07/30 职场文书
获奖感言范文
2015/07/31 职场文书
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫