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 相关文章推荐
js实现收缩菜单效果实例代码
Oct 30 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
Jun 13 Javascript
解析JavaScript模仿块级作用域
Dec 29 Javascript
通过js动态创建标签,并设置属性方法
Feb 24 Javascript
jQuery实现的上传图片本地预览效果简单示例
Mar 29 jQuery
vuex进阶知识点巩固
May 20 Javascript
如何在js代码中消灭for循环实例详解
Jul 29 Javascript
命令行批量截图Node脚本示例代码
Jan 25 Javascript
JS基于ES6新特性async await进行异步处理操作示例
Feb 02 Javascript
ES6中Set和Map用法实例详解
Mar 02 Javascript
移动端JS实现拖拽两种方法解析
Oct 12 Javascript
js实现日历
Nov 07 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
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
ThinkPHP路由详解
2015/07/27 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
javascript实现拼图游戏
2021/01/29 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
python 自动提交和抓取网页
2009/07/13 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
CNC数控操作工岗位职责
2013/11/19 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
退休感言
2014/01/28 职场文书
留学生求职信
2014/06/03 职场文书
世界读书日的活动方案
2014/08/20 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL