Angular4實(shí)現(xiàn)鼠標(biāo)懸停3d傾斜效果
Angular 是什么
Angular 是由谷歌開發(fā)與維護(hù)一個(gè)開發(fā)跨平臺(tái)應(yīng)用程序的框架,同時(shí)適用于手機(jī)與桌面。
Angular 有什么特點(diǎn)
基于 Angular 我們可以構(gòu)建適用于所有平臺(tái)的應(yīng)用。比如:Web 應(yīng)用、移動(dòng) Web 應(yīng)用、移動(dòng)應(yīng)用和桌面應(yīng)用等。
通過 Web Worker和服務(wù)端渲染 (SSR),達(dá)到在如今Web平臺(tái)上所能達(dá)到的最高渲染速度。
Angular 讓你能夠有效掌控可伸縮性?;?RxJS、Immutable.js 和其它推送模型,能適應(yīng)海量數(shù)據(jù)需求。
Angular 提供了哪些功能
動(dòng)態(tài)HTML
強(qiáng)大的表單系統(tǒng) (模板驅(qū)動(dòng)和模型驅(qū)動(dòng))
強(qiáng)大的視圖引擎
事件處理
快速的頁面渲染
靈活的路由
HTTP 服務(wù)
視圖封裝
AOT、Tree Shaking
Angular 與 AngularJS 有什么區(qū)別
不再有Controller和 Scope
更好的組件化及代碼復(fù)用
更好的移動(dòng)端支持
引入了 RxJS 與 Observable
引入了 Zone.js,提供更加智能的變化檢測(cè)
這個(gè)效果就是錘子科技官網(wǎng)的那個(gè)效果,滴滴滴傳送門,效果有一點(diǎn)偏差,總體還行。
說一下,實(shí)現(xiàn)這個(gè)的難點(diǎn)在哪
用原生寫的話,大家都會(huì)寫,但是對(duì)于初學(xué)angular的人來說,比如我,決定寫的時(shí)候我整個(gè)人是懵的,原生我會(huì)寫,可是讓我用angular寫,我不知道從何寫起。。。
運(yùn)用angular的指令,把這個(gè)效果包裝在一個(gè)指令里,下次想用簡(jiǎn)直不要太方便凹(在需要的地方添個(gè)指令就ok拉),
1.在angular指令里操作鼠標(biāo)事件、傳遞參數(shù),
2.怎樣獲取鼠標(biāo)操作對(duì)象的event對(duì)象呢,和原生一樣
3.怎樣獲取并操作對(duì)象的各種屬性呢
做這個(gè)的時(shí)候我還不知道。。。查資料看博客。。才知道是這個(gè)寫的
@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; ... } }
了解了上面的基本結(jié)構(gòu),就可以完成這個(gè)效果了,畢竟邏輯什么的都是一樣的。
直接貼代碼
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'+ ')'; } }
哇 這個(gè)截圖工具有點(diǎn)迷醉,真卡,
總結(jié)
以上所述是小編給大家介紹的Angular4實(shí)現(xiàn)鼠標(biāo)懸停3d傾斜,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- angularjs創(chuàng)建彈出框?qū)崿F(xiàn)拖動(dòng)效果
- 在AngularJS應(yīng)用中實(shí)現(xiàn)一些動(dòng)畫效果的代碼
- angularJS結(jié)合canvas畫圖例子
- Angular動(dòng)畫實(shí)現(xiàn)的2種方式以及添加購(gòu)物車動(dòng)畫實(shí)例代碼
- 用AngularJS的指令實(shí)現(xiàn)tabs切換效果
- AngularJS實(shí)現(xiàn)按鈕提示與點(diǎn)擊變色效果
- AngularJS中實(shí)現(xiàn)顯示或隱藏動(dòng)畫效果的方式總結(jié)
- 教你用AngularJS框架一行JS代碼實(shí)現(xiàn)控件驗(yàn)證效果
- 基于angularjs實(shí)現(xiàn)圖片放大鏡效果
- AngularJS實(shí)現(xiàn)的鼠標(biāo)拖動(dòng)畫矩形框示例【可兼容IE8】
相關(guān)文章
AngularJS的依賴注入實(shí)例分析(使用module和injector)
這篇文章主要介紹了AngularJS的依賴注入,結(jié)合實(shí)例形式分析了依賴注入的原理及使用module和injector實(shí)現(xiàn)依賴注入的步驟與操作技巧,需要的朋友可以參考下2017-01-01Angular CLI在Angular項(xiàng)目中如何使用scss詳解
angular-cli自身支持Scss預(yù)處理器,Scss比css更加方便靈活,而且層次清晰,代碼整潔。下面這篇文章主要給大家介紹了關(guān)于Angular CLI在Angular項(xiàng)目中如何使用scss的相關(guān)資料,需要的朋友可以參考下。2018-04-04解決angular的$http.post()提交數(shù)據(jù)時(shí)后臺(tái)接收不到參數(shù)值問題的方法
這篇文章為大家分享了解決angular的$http.post()提交數(shù)據(jù)時(shí)后臺(tái)接收不到參數(shù)值問題的方法,感興趣的小伙伴們可以參考一下2015-12-12詳解AngularJs中$resource和restfu服務(wù)端數(shù)據(jù)交互
之前小編和大家分享過使用$http同服務(wù)器進(jìn)行通信,但是功能上比較簡(jiǎn)單,angularjs還提供了另外一個(gè)可選的服務(wù)$resource,使用它可以非常方便的同支持restful的服務(wù)單進(jìn)行數(shù)據(jù)交互。下面來一起看看吧。2016-09-09Angular中使用ui router實(shí)現(xiàn)系統(tǒng)權(quán)限控制及開發(fā)遇到問題
這篇文章主要介紹了Angular中使用ui router實(shí)現(xiàn)系統(tǒng)權(quán)限控制及開發(fā)遇到問題的相關(guān)資料,本文分步驟介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09詳解webpack+angular2開發(fā)環(huán)境搭建
這篇文章主要介紹了詳解webpack+angular2開發(fā)環(huán)境搭建,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06