1、編寫目的
軟件學院培養計劃學期末展開課設, 通過實訓,鞏固、深化和擴展學生所學的JavaEE框架理論知識與專業技能,提高學生分析問題、解決問題的能力和動手編程能力,使學生能夠掌握一個基于WEB的小型應用系統的設計與開發,同時進一步熟悉數據庫的設計及使用。要解決的問題進行詳細的分析,弄清楚問題的要求,包括需要輸入什么數據,要得到什么結果,最后應輸出什么。
2、背景
項目要求開發基于Struts2設計和開發軟件學院實訓優秀教學資源共享平臺,以任務書為指導,做出符合規定的項目。
隨著經濟的發展,共享成為時代的主旋律。近年來,共享單車,共享電源等系列產品如雨后春筍般出現,這些不僅便利了人們的生活,而且使得共享意識扎根于人們腦海中。而后共享便構成一種新型的社會發展模式,即資源共享與速效成果趨勢。通過對零散資源的有效整合,既能滿足大眾需求方便快捷地獲取所需事物,還能促進本行業在大眾協力下高速發展。
人們物質生活的逐漸豐富,對精神生活的需求越來越大,資本和勞動力大量流向教育、旅游、計算機軟件、信息咨詢等方面。百年大計,教育為本,它不僅能夠促進個人的發展,更能決定社會、國家以致整個人類文明的未來。
在這樣的時代背景下,科學高效的教學資源,已經成為人們生活不可或缺的重要部分。再看我國當前的教育現狀,各地區間的差異所導致的教育不平衡性已經嚴重阻礙了社會的發展,具體表現為教學資源的嚴重短缺,直接導致了教師間水平上的差距,繼而影響了學生所受教育的品質。因此,如何讓有限的教學資源高效地流通起來,已經成為教育界迫在眉睫的事情。
在此背景下,教師資源共享信息平臺應運而生。
3、定義、縮寫詞和符號
基本要求:
(1)使用Struts2或別的框架,數據庫自由選擇(MySql、SQLServer或ORACLE);
(2)按照軟件工程的思想完成系統開發過程(包括需求分析、系統設計、編碼實現和測試運行);
(3)最終系統要求數據充實、界面友好、使用方便。
4、參考資料
《Struts2.x權威指南》 電子工業出版社 李剛 2012.10
《數據庫原理及應用》 清華大學出版社 劉爽英 2013.01
《架構探險:從零開始寫Java Web框架》 電子工業出版社 黃勇 2015-08-01
1、目標
本平臺——教師資源共享平臺順應時代主題,以教師學生為目標群體,為他們提供一個交流共享的平臺,主要功能及要求:
1.資源分類:根據每年的技術實訓方向擬分為Java、信息安全、大數據、HTML5,SAP、UI、移動互聯網等幾類資源的共享。
2.教師教學資源上傳功能:不同技術方向的教師只具備上傳本方向的技術資源如JAVA的授課教師是A,則其登錄后只能上傳Java類資源,上傳類型包括上課視頻、上課的案例、學生優秀作品、技術文章等。每個資源有相關信息的描述,如名字、簡述、上傳時間等。
3.學生資源共享:學生可上傳自己的作品,但需要教師審核才能上傳成功。
4.下載功能:游客可瀏覽資源,登錄用戶可觀看、下載所選擇的資源。
5.資源的評論、評分功能:用戶可對資源進行評論、給出評分。
6.資源查詢功能:可根據標題、類別、教師等進行單條件和多條件查詢,查詢結果還可根據評分進行排序查詢。
2、 運行環境
服務器:Tomcat7.0
主 機:windows7
3、 功能描述
圖 1 業務資源圖
圖 2功能圖解1
圖 3 功能圖解2
根據設計內容和要求進行需求分析,分析出系統的主要功能和設計重點。
根據需求分析的內容在小組中合理劃分模塊。
記得一年多以前,SAP全球執行副總裁、SAP大中華區總裁紀秉盟(Mark Gibbs)面對數十家媒體,首次用“云優先戰略”來解讀SAP的未來5年計劃;而今,有報告指出,SAP已經是Github上開源項目的十大全球貢獻者之一,超過80名SAP工程師為Cloud Foundry項目做出貢獻。
可以確定的是,一如SAP這樣的覆蓋企業數字化核心的ERP巨頭,如今也已經在云計算和開源的大道上急速飛奔——SAP不僅正在大力推動云原生的企業級項目落地,比如數字化核心SAP S/4HANA Cloud的SaaS云和SAP Cloud Platform的PaaS云這樣的重量級產品線;同時,也在迅速與包括AWS、Azure、阿里云在內的全球前五大IaaS服務提供商達成戰略級合作伙伴關系。
至此,在筆者看來,一個開放、開源的SAP云生態戰略已經越來越清晰了。為什么這么說?我們可以從以下幾個方面逐層解讀。
了解SAP的人或許知道,除了SAP的S/4HANA Cloud ERP云之外,SAP在過去幾年陸續投入了近500億美元用來并購各類企業級SaaS云應用領域的獨角獸公司,包括Hybris、Ariba、SuccessFactors、Concur、Fieldglass以及最新收購的Gigya和CallidusCloud等。
不過很顯然,雖然這些云產品在各自領域都是獨角獸級別,但SAP既然并購進來,就一定會想辦法把它們統合起來,發揮更大的價值。
今年6月,在奧蘭多舉辦的SAP2018年度SAPPHIRE NOW大會上,SAP推出了全新整合的CRM云解決方案SAP C/4HANA,其核心組件包括了SAP Marketing Cloud(營銷云)、SAP Commerce Cloud(電商云)、SAP Service Cloud(服務云)、SAP Customer Data Cloud(客戶數據云,其中包含收購的 Gigya 解決方案)和 SAP Sales Cloud(銷售云,其中包含收購的CallidusCloud 解決方案等5朵云。算下來,SAP的知名SaaS云解決方案已經不下10余種。
不僅如此,SAP還陸續與AWS、微軟Azure、阿里云、Google云等全球所有主要超大型公有云計算架構提供商和IBM等私有云主要供應商開展了全方位的合作——例如今年9月19日,SAP全球CEO孟鼎銘(Bill McDermott)與阿里巴巴集團CEO張勇在杭州云棲大會上攜手宣布SAP最核心同時也是最新的兩大解決方案——SAP S/4HANA Cloud和SAP Cloud Platform與阿里云一起通過聯合創新,加速云端落地,成就智慧企業。
值得一提的是,在SAP的SaaS云“百花齊放”及IaaS云“遍地開花”的公司多云策略中的關鍵一環就是SAP自研的唯一一款PaaS云方案:SAP Cloud Platform,即SAP云平臺。
“SAP云平臺是SAP的中樞神經系統。”SAP聯合創始人Hasso博士在2018年度SAPPHIRE NOW大會的主題演講中給SAP云平臺做了一個權威和準確的定位。
SAP聯合創始人Hasso博士在2018年度SAPPHIRE NOW大會上的主題講演內容
事實上,SAP云平臺改變了SAP的創新方式,使得SAP能夠更快、更容易地向合作伙伴和客戶交付融入機器學習、區塊鏈或基于SAP HANA的應用程序。
首先,SAP云平臺將SAP的所有SaaS云解決方案集中在一個產品套件中,客戶可以使用它來實現端到端的無縫的互聯互通,SAP云平臺是這些相對獨立的SaaS云解決方案之間的粘合劑。SAP云平臺為這些SaaS應用及本地化應用提供了一個集成層,這樣客戶就有了一致和集成的數據,并且這些數據并不是孤立的——客戶可以統一規劃,一起來使用這些解決方案。
其次,該平臺允許客戶的開發團隊從頭開始構建新的解決方案,幫助他們進行數字轉換——開發人員可以將這些新應用集成到SAP或非SAP解決方案中,因為SAP云平臺與亞馬遜AWS、谷歌云、微軟Azure和阿里云等IaaS公共云提供商合作,擁有開放API,并支持開源編碼語言。
應該說,SAP云平臺是一個讓SAP的客戶變得敏捷的敏捷平臺——客戶可以逐步開發解決方案,查看解決方案是否滿足用戶的需求,根據用戶的反饋調整下一次迭代,然后快速擴展并在整個組織中帶來創新。
這樣的改變,實際上是SAP本身使命的一大轉變。正如Hasso博士所言:“智慧企業超越了ERP本身”——SAP從為企業提供ERP企業資源計劃,到如今幫助企業打造全價值鏈的智慧企業。
在筆者看來,從企業內擴展到企業周邊乃至最終用戶,很大程度上是因為客戶市場從賣方市場到買方市場的轉變。
簡單一個例子:一家賣席夢思企業,原來每個顧客大約8~10年才更換一次床墊,但如今,這家賣床墊的公司改變了他們的業務模式,他們今天不光賣床墊,還會向顧客提供APP,幫助顧客去監測他們的睡眠質量,這樣這家企業就能和他們的顧客之間保持長期的交互,并向他們提供改善睡眠質量的解決方案。
不僅是2C的企業,如今越來越多的B2B公司,都在把商業模式轉向B2B2C,注重獲取消費者的第一手消費者信息。比如一家專門生產巴士汽車的公司,過去是2B的商業模式,如今它會收集巴士投入運營后的乘客數據,并且利用這些數據來改良巴士汽車的設計。
換句話說,有越來越多的商家注重向客戶交付一個端到端完整的客戶體驗,這就需要實時了解前端客戶需求的變化,需要了解自身后端供應鏈的交付能力——很明顯,中臺是鏈接后端ERP業務和前端CRM業務的關鍵所在,也就是說,SAP云平臺這樣一個PaaS云的中臺解決方案就處于越來越重要的地位;與此同時,各行各業的前端場景都需要納入系統中,而這不可能是某一家公司能夠從頭至尾獨自完成的。
通過SAP云平臺可以幫助企業可以按照自己希望的方式掌控自身的數據安全,在任何IT基礎架構上,擁有更靈活、快速和敏捷的創新能力,打造智慧企業。
實際上,從互聯網思維到用戶體驗,再到未來的物聯網和智能世界,數據已經成為一切的基礎,而不再像過去二三十年那樣,僅僅是企業內部的財務、生產和供應鏈等企業級系統。
“SAP經驗豐富的開發人員已經在內部構建整個企業級業務系統幾十年了,但是現在他們已經認識到他們不可能構建智慧企業系統中的所有東西。他們必須把目光投向開放源碼,并接受它。”SAP云平臺產品營銷全球副總裁Dan Lahl介紹說:“與早些時候相比,我們現在有很多經驗豐富的開發人員和年輕的開發人員。SAP內部的文化正在改變,我們需要兩者兼備。現在SAP團隊比以往任何時候都在更多的地方使用開源。”
數據采集技術的發展和數據處理技術的發展,讓云和端相輔相成,遍及今天的任何行業。對于每一家企業來說,今天都有太多的代碼需要編寫,以至于每個人都在向軟件的協同開發邁進,而這正是像Kubernetes和Cloud Foundry這樣的開源項目獲得動力的地方。
“為了能夠更好地幫助我們的客戶,我們必須接納和擁抱開源技術。”Dan Lahl表示,“比如SAP正在為Cloud Foundry構建開放服務代理API(Open Service Broker API);比如SAP與SUSE合作在Kubernetes之上構建Cloud Foundry發行版; 此外,SAP還在向SAP云平臺添加來自其他供應商的更多功能,比如一些機器學習的技術——我們正在走出去,把開源的能力帶給開源社區,也把開源的能力反哺給SAP,這是SAP未來生存的唯一途徑。”
事實上,到2018年年中,SAP API Business Hub上已經發布了100多個易于使用的API集成內容包——SAP正在大量投資于簡化端到端集成的模板、連接器和工具。
“通過今年10月份發布的SAP Cloud Platform Integration Suite集成套件服務云所提供的跨商業應用和開源系統的集成能力,客戶可以用CP Integration連通SAP旗下的所有SaaS云應用及OP本地化應用。”SAP中國區SAP云平臺業務拓展總監劉宏江表示,此外,通過CP Open Connectors這一開源技術還可以讓SAP云平臺連通第三方的云應用,并通過開放開源的API技術把CP Integration和Open Connector實現無縫集成,以預置式服務和文本的方式提供給有需要的客戶,可以實現開箱即用。
舉個例子,比如從招聘到退休流程、從銷售線索到收款流程,或者從采購到付款的流程,這些流程可能貫穿于多種應用,比如SaaS軟件即服務應用、OP本地化企業預置型應用或定制應用,因此企業比以往更需要無縫集成SAP和非SAP應用中的各種端到端流程。
據悉,借助SAP Cloud Platform Integration Suite集成套件服務云,企業可以利用150多個面向第三方應用的開放式連接器,通過統一的API,實現1對多的基于中心的集成模式,進而簡化端到端流程的集成。
值得一提的是,SAP云平臺上除了SAP Cloud Platform Integration Suite集成套件服務云,還有SAP Cloud Platform Experience Maker,即數字化用戶體驗服務云——如果兩者一起使用,可以幫助企業快速實現云端到云端,云端到本地的后臺業務應用系統級的互聯互通以及以最終用戶為核心的云端體驗提升服務,為客戶、員工及合作伙伴打造敏捷,高效的企業級互聯互通及體驗提升服務。
“對標業內的云服務細分標準,SAP的云平臺實際上提供了面向系統間集成的iPaaS集成套件服務云和面向最終用戶前端應用體驗提升及開發的aPaaS數字化用戶體驗服務云。”劉宏江解釋說,iPaaS的作用是把復雜的企業架構中分散化的海量數據等信息,進行流程集成、數據集成、物聯網底層集成,在系統層面整合人員、流程、事件和事物;aPaaS則是通過SAP所擅長的Fiori、Cloud Portal、Jam等企業用戶體驗服務,讓客戶用最小的代價來實現最大化的云端應用體驗的提升,讓企業級應用擁有消費者級的用戶體驗。
“SAP試圖讓客戶盡可能輕松地生活在一個需要不同云方案和應用程序之間集成的混合云環境中。”在Dan Lahl看來,借助開源,如今在SAP云平臺上進行云端開發變得容易了很多——因為在開源的環境下,只要團隊中有一位懂SAP業務系統和互聯網技術的架構師,其他團隊成員具備一定的互聯網開發經驗,懂HTML5、Java,基本上就可以上手SAP云平臺的開發實踐。
據悉,未來SAP將在SAP云平臺上發布更多的元數據和API,方便客戶將云端應用程序與后臺的SAP或非SAP的各類業務系統,無論在云端還是在本地,都可以通過云平臺無縫連接起來,實現敏捷開發及創新應用。
毫無疑問,一個開源開放的SAP,一定會給業界帶來更好的創新環境,幫助企業實現智慧企業的夢想。
文/余文
《科技看門道》堅持深度報道,希望能通過資深媒體人對IT產業熱點新聞的深入思考,挖掘其背后的商業邏輯和創新模式——不僅看熱鬧,更要看門道!
《科技看門道》主筆在行業渠道媒體擁有超過15年的從業經歷,不僅對IT消費類和企業級軟件、硬件、云計算、大數據、人工智能、區塊鏈均有較深入的理解,同時見證了中國IT產業鏈上下游合作生態圈包括分銷、零售、SI、ISV和CSV的進化歷程,見證了金融、能源、制造、醫療、教育、政府、零售、高科技等行業的信息化之路。
《科技看門道》相信,IT產業在供給側的改革——包括云計算、大數據、移動互聯、人工智能、區塊鏈等,將會成為推動各行各業發展進步的核心力量。
果圖
各位朋友大家好!
今天給大家帶來的是 酷炫的svg與canvas結合動畫特效源碼!
有想要文件版源碼的 可以私聊小編
廢話不多說上源碼!
select = function(s) {
return document.querySelector(s);
},
selectAll = function(s) {
return document.querySelectorAll(s);
},
mainSVG = select('.mainSVG'),
orbit = select('#orbit'),
dot = select('#dot'),
startShape = select('#startShape'),
endShape = select('#endShape'),
shapeGroup = select('#shapeGroup'),
pContainer = select('#pContainer'),
particlePool = [],
numParticles = 400,
particleCount = 0
TweenMax.set('svg', {
visibility: 'visible'
})
TweenMax.set(['#startShape','#endShape'], {
transformOrigin:'50% 50%'
})
var orbitPath = MorphSVGPlugin.pathDataToBezier(orbit.getAttribute('d'), {
offsetX: 0,
offsetY: 0
})
var mainTl = new TimelineMax();
var tl = new TimelineMax({ repeat:-1, yoyo:false});
var tl2 = new TimelineMax({ repeat:-1, yoyo:false, onUpdate:playParticle});
tl2.to(dot, 6, {
bezier: {
type: "cubic",
values: orbitPath,
autoRotate: false
},
ease:Linear.easeNone
})
//shapes
tl.to('#startShape', 20, {
rotation:360,
ease:Linear.easeNone
})
.to('#endShape', 20, {
rotation:-360,
ease:Linear.easeNone
},'-=20')
function createParticles() {
var i = numParticles, p;
while (--i > -1) {
p = document.createElementNS(xmlns, 'use');
p.setAttributeNS(xlinkns, "xlink:href", '#particle');
pContainer.appendChild(p);
//p.setAttributeNS(null, 'fill', particleColorArray[i % particleColorArray.length]);
p.setAttributeNS(null, 'opacity', 0);
p.setAttribute('class', "particle");
particlePool.push(p);
}
}
function playParticle(){
var p = particlePool[particleCount];
var curr = {x:dot._gsTransform.x, y:dot._gsTransform.y};
var rad = Math.atan2(curr.y - 300, curr.x - 400);
var deg = Math.round(rad * (180/Math.PI));
//console.log(deg)
//console.log(dot._gsTransform.x)
TweenMax.set(p, {
x:randomBetween(curr.x, curr.x - 5),
y: randomBetween(curr.y, curr.y+5),
alpha:1,
transformOrigin:'50% 50%'
});
var tl = new TimelineMax();
tl.to(p, randomBetween(3, 6), {
//paused:true,
physics2D: {
velocity: randomBetween(5, 10),
angle:(deg % 2) ? deg : deg - 180,//randomBetween(-95, -85),
gravity:randomBetween(-1, 1)
},
scale:randomBetween(0, 3.3),
//rotation:randomBetween(180, 780),
onComplete:completeParticle,
onCompleteParams:[p],
alpha:0
//skewY:(Math.random() * 180),
//ease: Power4.easeIn,
//onStart:flicker,
//onStartParams:[p]
});
particleCount++;
particleCount = (particleCount >=numParticles) ? 0 : particleCount
}
function flicker(p){
//console.log("flivker")
TweenMax.killTweensOf(p, {alpha:true});
TweenMax.fromTo(p, 0.4,{
alpha:1
}, {
alpha:Math.random(),
ease: RoughEase.ease.config({ template: Power0.easeNone, strength: 3, points: 6, taper: "both", randomize: true, clamp: false}),
repeat:-1
})
}
function completeParticle(p){
TweenMax.set(p, {
x:-10,
y:-10,
alpha:1,
scale:1
})
}
function randomBetween(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
createParticles();
mainTl.add(tl,0);
mainTl.add(tl2,0);
//ScrubGSAPTimeline(mainTl)
mainTl.timeScale(1)
TweenMax.globalTimeScale(1)
/*!
* VERSION: 0.1.3
* DATE: 2015-03-24
* UPDATES AND DOCS AT: http://greensock.com
*
* This is a special version of the plugin that is only to be used on certain sites like codepen.io. It will redirect to a page on GreenSock.com if you try using it on a different domain. Please sign up for Club GreenSock to get the fully-functional version at http://greensock.com/club/
*
* @license Copyright (c) 2008-2015, GreenSock. All rights reserved.
* Physics2DPlugin is a Club GreenSock membership benefit; You must have a valid membership to use
* this code without violating the terms of use. Visit http://greensock.com/club/ to sign up or get more details.
* For licensing details, see http://greensock.com/licensing/
*
* @author: Jack Doyle, jack@greensock.com
*/
var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";var a=Math.PI/180,b=function(a,b,c,d,e){this.p=b,this.f="function"==typeof a[b],this.start=this.value=this.f?a[b.indexOf("set")||"function"!=typeof a["get"+b.substr(3)]?b:"get"+b.substr(3)]():parseFloat(a[b]),this.velocity=c||0,this.v=this.velocity/e,d||0===d?(this.acceleration=d,this.a=this.acceleration/(e*e)):this.acceleration=this.a=0},c=Math.random(),d=_gsScope._gsDefine.globals,e=d.com.greensock.core.Animation._rootFramesTimeline,f="",g="Physics2DPlugin",h=String.fromCharCode(103,114,101,101,110,115,111,99,107,46,99,111,109),i=String.fromCharCode(47,114,101,113,117,105,114,101,115,45,109,101,109,98,101,114,115,104,105,112,47),j=function(a){for(var b=-1!==(window?window.location.href:"").indexOf(String.fromCharCode(103,114,101,101,110,115,111,99,107))&&-1!==a.indexOf(String.fromCharCode(108,111,99,97,108,104,111,115,116)),c=[h,String.fromCharCode(99,111,100,101,112,101,110,46,105,111),String.fromCharCode(99,100,112,110,46,105,111),String.fromCharCode(103,97,110,110,111,110,46,116,118),String.fromCharCode(99,111,100,101,99,97,110,121,111,110,46,110,101,116),String.fromCharCode(116,104,101,109,101,102,111,114,101,115,116,46,110,101,116),String.fromCharCode(99,101,114,101,98,114,97,120,46,99,111,46,117,107),String.fromCharCode(116,121,109,112,97,110,117,115,46,110,101,116),String.fromCharCode(116,119,101,101,110,109,97,120,46,99,111,109),String.fromCharCode(116,119,101,101,110,108,105,116,101,46,99,111,109),String.fromCharCode(112,108,110,107,114,46,99,111),String.fromCharCode(104,111,116,106,97,114,46,99,111,109),String.fromCharCode(106,115,102,105,100,100,108,101,46,110,101,116)],d=c.length;--d>-1;)if(-1!==a.indexOf(c[d]))return!0;return b&&window&&window.console&&console.log(String.fromCharCode(87,65,82,78,73,78,71,58,32,97,32,115,112,101,99,105,97,108,32,118,101,114,115,105,111,110,32,111,102,32)+g+String.fromCharCode(32,105,115,32,114,117,110,110,105,110,103,32,108,111,99,97,108,108,121,44,32,98,117,116,32,105,116,32,119,105,108,108,32,110,111,116,32,119,111,114,107,32,111,110,32,97,32,108,105,118,101,32,100,111,109,97,105,110,32,98,101,99,97,117,115,101,32,105,116,32,105,115,32,97,32,109,101,109,98,101,114,115,104,105,112,32,98,101,110,101,102,105,116,32,111,102,32,67,108,117,98,32,71,114,101,101,110,83,111,99,107,46,32,80,108,101,97,115,101,32,115,105,103,110,32,117,112,32,97,116,32,104,116,116,112,58,47,47,103,114,101,101,110,115,111,99,107,46,99,111,109,47,99,108,117,98,47,32,97,110,100,32,116,104,101,110,32,100,111,119,110,108,111,97,100,32,116,104,101,32,39,114,101,97,108,39,32,118,101,114,115,105,111,110,32,102,114,111,109,32,121,111,117,114,32,71,114,101,101,110,83,111,99,107,32,97,99,99,111,117,110,116,32,119,104,105,99,104,32,104,97,115,32,110,111,32,115,117,99,104,32,108,105,109,105,116,97,116,105,111,110,115,46,32,84,104,101,32,102,105,108,101,32,121,111,117,39,114,101,32,117,115,105,110,103,32,119,97,115,32,108,105,107,101,108,121,32,100,111,119,110,108,111,97,100,101,100,32,102,114,111,109,32,101,108,115,101,119,104,101,114,101,32,111,110,32,116,104,101,32,119,101,98,32,97,110,100,32,105,115,32,114,101,115,116,114,105,99,116,101,100,32,116,111,32,108,111,99,97,108,32,117,115,101,32,111,114,32,111,110,32,115,105,116,101,115,32,108,105,107,101,32,99,111,100,101,112,101,110,46,105,111,46)),b}(window?window.location.host:""),k=_gsScope._gsDefine.plugin({propName:"physics2D",version:"0.1.3",API:2,init:function(c,d,k){if(!j)return window.location.href="http://"+h+i+"?plugin="+g+"&source="+f,!1;this._target=c,this._tween=k,this._runBackwards=k.vars.runBackwards===!0,this._step=0;for(var s,l=k._timeline,m=Number(d.angle)||0,n=Number(d.velocity)||0,o=Number(d.acceleration)||0,p=d.xProp||"x",q=d.yProp||"y",r=d.accelerationAngle||0===d.accelerationAngle?Number(d.accelerationAngle):m;l._timeline;)l=l._timeline;return this._stepsPerTimeUnit=s=l===e?1:30,d.gravity&&(o=Number(d.gravity),r=90),m*=a,r*=a,this._friction=1-Number(d.friction||0),this._overwriteProps.push(p),this._overwriteProps.push(q),this._x=new b(c,p,Math.cos(m)*n,Math.cos(r)*o,s),this._y=new b(c,q,Math.sin(m)*n,Math.sin(r)*o,s),this._skipX=this._skipY=!1,j},set:function(){var e,f,g,h,i,j,b=this._tween._time,c=this._x,d=this._y;if(this._runBackwards===!0&&(b=this._tween._duration-b),1===this._friction)g=.5*b*b,e=c.start+(c.velocity*b+c.acceleration*g),f=d.start+(d.velocity*b+d.acceleration*g);else{if(b*=this._stepsPerTimeUnit,h=j=(0|b)-this._step,i=b%1,j>=0)for(;--j>-1;)c.v+=c.a,d.v+=d.a,c.v*=this._friction,d.v*=this._friction,c.value+=c.v,d.value+=d.v;else for(j=-j;--j>-1;)c.value-=c.v,d.value-=d.v,c.v/=this._friction,d.v/=this._friction,c.v-=c.a,d.v-=d.a;e=c.value+c.v*i,f=d.value+d.v*i,this._step+=h}this._skipX||(c.r&&(e=0|e+(0>e?-.5:.5)),c.f?this._target[c.p](e):this._target[c.p]=e),this._skipY||(d.r&&(f=0|f+(0>f?-.5:.5)),d.f?this._target[d.p](f):this._target[d.p]=f)}}),l=k.prototype;l._kill=function(a){return null!=a[this._x.p]&&(this._skipX=!0),null!=a[this._y.p]&&(this._skipY=!0),this._super._kill(a)},l._roundProps=function(a,b){(a.physics2D||a[this._x.p])&&(this._x.r=b),(a.physics2D||a[this._y.p])&&(this._y.r=b)},k._autoCSS=!0,k._cssRegister=function(){var a=d.CSSPlugin;if(a){var b=a._internals,e=b._parseToProxy,f=b._setPluginRatio,g=b.CSSPropTween;b._registerComplexSpecialProp("physics2D",{parser:function(a,b,d,h,i,j){j=new k;var o,l=b.xProp||"x",m=b.yProp||"y",n={};return n[l]=n[m]=c++,o=e(a,n,h,i,j),i=new g(a,"physics2D",0,0,o.pt,2),i.data=o,i.plugin=j,i.setRatio=f,j._onInitTween(o.proxy,b,h._tween),i}})}}}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()();
*請認真填寫需求信息,我們會在24小時內與您取得聯系。