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 相关文章推荐
JQuery小知识
Oct 15 Javascript
js实现Select列表各项上移和下移的方法
Aug 14 Javascript
jQuery常用知识点总结以及平时封装常用函数
Feb 23 Javascript
javascript中使用未定义变量或值的情况分析
Jul 19 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
Mar 01 Javascript
Javascript实现时间倒计时效果
Jul 15 Javascript
基于DOM节点删除之empty和remove的区别(详解)
Sep 11 Javascript
删除table表格行的实例讲解
Sep 21 Javascript
浅谈vue方法内的方法使用this的问题
Sep 15 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
Nov 20 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
Jul 23 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中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
php中strtotime函数性能分析
2016/11/20 PHP
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
2013/01/21 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
详解ES6中的let命令
2020/04/05 Javascript
js实现横向拖拽导航条功能
2017/02/17 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
python GUI实例学习
2017/11/21 Python
简单实现python进度条脚本
2017/12/18 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Python Subprocess模块原理及实例
2019/08/26 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
房地产营销策划方案
2014/02/08 职场文书
灵山大佛导游词
2015/02/04 职场文书
就业意向书范本
2015/05/11 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
员工给公司的建议书
2019/06/24 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
Java实现房屋出租系统详解
2021/10/05 Java/Android
一条慢SQL语句引发的改造之路
2022/03/16 MySQL