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 相关文章推荐
TinyMCE 新增本地图片上传功能
Nov 05 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
Oct 18 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
Oct 12 Javascript
基于JavaScript实现弹出框效果
Feb 19 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
May 12 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
Oct 20 Javascript
Easyui的组合框的取值与赋值
Oct 28 Javascript
JS实现动画兼容性的transition和transform实例分析
Dec 13 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
Feb 02 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
Oct 17 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
JavaScript字符串转数字的简单实现方法
Nov 27 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 array操作10个小技巧分享
2011/06/23 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
js中的this关键字详解
2013/09/25 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
Python对List中的元素排序的方法
2018/04/01 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
对python的输出和输出格式详解
2018/12/08 Python
Python面向对象程序设计示例小结
2019/01/30 Python
selenium+python环境配置教程详解
2019/05/28 Python
关于Keras Dense层整理
2020/05/21 Python
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
大学军训自我鉴定
2013/12/15 职场文书
班组长安全职责
2014/01/05 职场文书
秋季运动会活动方案
2014/02/05 职场文书
《童趣》教学反思
2014/02/19 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
学生个人自我鉴定
2014/03/26 职场文书
勾股定理课后反思
2014/04/26 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android