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 相关文章推荐
使图片旋转的3种解决方案
Nov 21 Javascript
JS获取html对象的几种方式介绍
Dec 05 Javascript
JavaScript中的prototype和constructor简明总结
Apr 05 Javascript
2则自己编写的jQuery特效分享
Feb 26 Javascript
JS中产生标识符方式的演变
Jun 12 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
Dec 14 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
Apr 15 Javascript
JavaScript编写棋盘覆盖代码详解
Aug 28 Javascript
jQuery实现的form转json经典示例
Oct 10 jQuery
微信小程序实现跑马灯效果
Oct 21 Javascript
详解Vue前端生产环境发布配置实战篇
May 07 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
Sep 09 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&amp;&amp;mysql)六
2006/10/09 PHP
一段php加密解密的代码
2007/07/16 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
javascript读写json示例
2014/04/11 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
微信小程序 前端源码逻辑和工作流详解
2016/10/08 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
Python编写一个闹钟功能
2017/07/11 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
python读取图片任意范围区域
2019/01/23 Python
python三引号输出方法
2019/02/27 Python
Python绘制股票移动均线的实例
2019/08/24 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
Python实现一个优先级队列的方法
2020/07/31 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
Europcar比利时:租车
2019/08/26 全球购物
部队领导证婚词
2014/01/12 职场文书
父母寄语大全
2014/04/12 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
感恩教育观后感
2015/06/17 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
MySQL 数据类型详情
2021/11/11 MySQL