Angular4实现鼠标悬停3d倾斜效果


Posted in Javascript onOctober 25, 2017

Angular 是什么

Angular 是由谷歌开发与维护一个开发跨平台应用程序的框架,同时适用于手机与桌面。

Angular 有什么特点

基于 Angular 我们可以构建适用于所有平台的应用。比如:Web 应用、移动 Web 应用、移动应用和桌面应用等。

通过 Web Worker和服务端渲染 (SSR),达到在如今Web平台上所能达到的最高渲染速度。

Angular 让你能够有效掌控可伸缩性。基于 RxJS、Immutable.js 和其它推送模型,能适应海量数据需求。

Angular 提供了哪些功能

动态HTML
强大的表单系统 (模板驱动和模型驱动)
强大的视图引擎
事件处理
快速的页面渲染
灵活的路由
HTTP 服务
视图封装
AOT、Tree Shaking

Angular 与 AngularJS 有什么区别

不再有Controller和 Scope
更好的组件化及代码复用
更好的移动端支持
引入了 RxJS 与 Observable
引入了 Zone.js,提供更加智能的变化检测

这个效果就是锤子科技官网的那个效果,滴滴滴传送门,效果有一点偏差,总体还行。

说一下,实现这个的难点在哪

用原生写的话,大家都会写,但是对于初学angular的人来说,比如我,决定写的时候我整个人是懵的,原生我会写,可是让我用angular写,我不知道从何写起。。。

运用angular的指令,把这个效果包装在一个指令里,下次想用简直不要太方便凹(在需要的地方添个指令就ok拉),

1.在angular指令里操作鼠标事件、传递参数,

2.怎样获取鼠标操作对象的event对象呢,和原生一样

3.怎样获取并操作对象的各种属性呢

做这个的时候我还不知道。。。查资料看博客。。才知道是这个写的

@HostListener('mousemove') onMouseMove(para) {}
 @HostListener('mousemove') onMouseMove(para) {
 let e= para ||window.event;
 }

export class DirectivesDirective {
 constructor(private el: ElementRef) {
 }
 @HostListener('mousemove') onMouseMove(para) {
 let e= para ||window.event;
 let divTop = this.el.nativeElement.offsetTop;
 ...
 }
}

了解了上面的基本结构,就可以完成这个效果了,毕竟逻辑什么的都是一样的。

直接贴代码

import {Directive, ElementRef, HostListener} from '@angular/core';
@Directive({
 selector: '[appDirectives]'
})
export class DirectivesDirective {
// public el;
 private distance = 50;
 private rotationMultiple = 0.1
 constructor(private el: ElementRef) {
 this.distance = 50;
 this.rotationMultiple = 0.1
 }
 @HostListener('mousemove') onMouseMove(para) {
 let e= para ||window.event;
 let divTop = this.el.nativeElement.offsetTop;
 let divLeft = this.el.nativeElement.offsetLeft;
 let divWidth = this.el.nativeElement.offsetWidth;
 let divHeight =this.el.nativeElement.offsetHeight;
 if(e.clientX < divWidth/2 && e.clientY > divHeight/2 || e.clientX > divWidth/2 && e.clientY > divHeight/2) {
 // 3.4
 let pctX =(((e.clientX - divLeft)/ divWidth) - 0.5);
 let pctY = -(((e.clientY - divTop)/ divHeight) - 0.3);
 this.animate(pctX, pctY, this.rotationMultiple, this.distance);
 }
 if(e.clientX < divWidth/2 && e.clientY < divHeight/2 || e.clientX > divWidth/2 && e.clientY < divHeight/2) {
 // 1.2
 let pctX =((e.clientX - divLeft)/ divWidth) - 0.7;
 let pctY = ((e.clientY - divTop)/ divHeight) - 0.5;
 this.animate(pctX, pctY, this.rotationMultiple, this.distance);
 }
 }
 private animate(pctX: number, pctY: number, rotationMultiple: number, distance: number) {
 let rotateX = pctY * rotationMultiple * -180;
 let rotateY = pctX * rotationMultiple * 180;
 this.el.nativeElement.style.transform = ' rotateX(' + rotateX + 'deg' + ')' + ' rotateY(' + rotateY + 'deg'+ ')';
 }
}

哇 这个截图工具有点迷醉,真卡,

Angular4实现鼠标悬停3d倾斜效果

总结

以上所述是小编给大家介绍的Angular4实现鼠标悬停3d倾斜,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript的parseInt 进制问题
May 07 Javascript
JS 实现导航栏悬停效果(续2)
Sep 24 Javascript
JS之Date对象和获取系统当前时间详解
Jan 13 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
Dec 18 Javascript
js中遍历对象的属性和值的方法
Jul 27 Javascript
jquery实现百叶窗效果
Jan 12 Javascript
浅谈angular4实际项目搭建总结
Dec 01 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
Sep 26 Javascript
微信小程序实现顶部导航特效
Jan 28 Javascript
Javascript地址引用代码实例解析
Feb 25 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
Aug 03 Javascript
微信小程序用户授权最佳实践指南
May 08 Javascript
详解vue 组件之间使用eventbus传值
Oct 25 #Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
Oct 25 #Javascript
Windows安装Node.js报错:2503、2502的解决方法
Oct 25 #Javascript
JavaScript编程设计模式之构造器模式实例分析
Oct 25 #Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
Oct 25 #Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
Oct 25 #Javascript
JS获取当前地理位置的方法
Oct 25 #Javascript
You might like
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
学习php开源项目的源码指南
2014/12/21 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
python测试mysql写入性能完整实例
2018/01/18 Python
Python字符串格式化%s%d%f详解
2018/02/02 Python
使用Scrapy爬取动态数据
2018/10/21 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
国家助学金获奖感言
2014/01/31 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
反腐倡廉标语
2014/06/24 职场文书
外国人来华邀请函
2015/01/31 职场文书
保研推荐信范文
2015/03/25 职场文书
求职推荐信范文
2015/03/27 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
golang DNS服务器的简单实现操作
2021/04/30 Golang
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python