㈠ css設計時,微軟雅黑和宋體切換時背景發生位移的問題
把你的容器大小固定不就的了嗎。
㈡ js滑鼠移動到父級的DIV會導致子DIV位移(onmouseover mouseout)
zys 的邏輯有問題,導致計算值出現錯誤,而Interval又沒有設置終止條件。導致此問題的發生
㈢ Web Service和WCF的到底有什麼區別
Web Service是早期的技術實現了,也是soap的東西,採用的主要是http協議,假如是在C#上開發的話,需要寄宿在IIS上來實現。
WCF的話是相對較新的技術,裡面的basichttpbinding可以跟以前的ws進行通信,並且集成了大部分的通信協議(幾種http協議的實現以及net.Tcp實現、msmq、命名管道等實現),另外寄宿的宿主可以是命令行控制台、IIS、桌面程序等。
差別的話,感覺有這以下幾點[針對C#來說的]。
ws的話,編程模型沒有wcf的那麼好,具體的實現差別建議網路下,個人覺得wcf比較好。wcf可以用契約的介面方式來進行實現,而ws的話主要是通過繼承WebService的類來實現的,方法上添加WebMethod特性,WCF的話是通過服務契約來聲明(可以是介面也可以是類對象)
ws的話通用性比較強,跟java等ws也可以進行互相通信,然後假如是wcf發布的服務,除了basicHttpBinding這種綁定之外,其餘的幾種綁定基本上不能作為互相通信。例如命名管道跟net.Tcp都是,值得說的是這里的net.Tcp跟原生的tcp是不一樣的,內部實現上參考tcp的可靠連接機制進行了應用層的一套實現。
另外一點就是服務引用跟web引用上的,這個嚴格來說不能屬於兩者的區別,只是.net版本的區別,主要是針對客戶端對服務端發布好的服務進行的引用,服務引用生成的時候,會在配置文件上存在一份配置項,可以進行ABC終結點的配置,假如是web引用的話,會在setting中添加上一個硬編碼的地址。建議用服務引用。
還有一個就是客戶端調用服務端開發的時候,webservice的話,基本上只能通過服務端發布的地址來進行引用[應用的方式可以參考點3],或者通過服務端提供的wsdl文件來進行引用(該種方式一般比較少,因為需要提供文件,而不是通過公開的方式來進行介面的提供,無法應對服務變更後發布問題,但是確實有這個情況的存在)。而wcf的話,還存在可以通過提供契約文件(就是聲明了ServiceContract的那個介面文件)來進行服務的調用。
在介面層面的話,凡是IList<class T>以及IDictionary<class T>這一類的泛型實現都會在進行服務引用的時候,都會轉換為數組的,例如void F(IList<int>)會在引用後成為void F(int[])這種方式,而才用點4提供的契約文件的話就能保持方法的原始聲明。
個人建議的話,假如是新開發的系統基本上都才用wcf比較好,一個是介面的思想,一個是假如需要轉換為其他協議的話可以比較方便,只需要通過配置文件修改下就可以[當前前提是沒有用到特定協議的特定屬性,例如服務回調,有些協議是不支持雙向通信的]。而且也需要考慮發布的服務是否需要公開給別的語言進行通信。
另外說的性能在下降的話,大概說明下:
基本上針對應用的開發都是基於socket的開發,傳統的socket開發的話,是需要自己去實現整個通信框架的,包括多線程處理,IOCP等的實現[基本上.net的非同步通信模型在內部實現都會綁定好,IOCP是一個非同步模型,自行網路],二進制流的編碼處理[網路傳輸都是通過二進制的,例如utf8到二進制的轉換],tcp無邊界消息的處理[udp的話沒有這個,但是包體的大小也是有限制],通信協議的約定處理[例如ws跟wcf是採用soap這種,各種ws的約定,例如多少個位元組表示數據流的長度、數據的檢驗,還是數據加密位,也包括數據的位移處理],數據上拋模型跟數據回復模型[接受到數據後是需要上拋給業務層去進行處理的,然後也需要回復給客戶端,不過也不一定是這樣,看需求],還有各種針對性的處理,例如客戶端socket的保存[有可能對長期不適用的套接字要進行自動斷開的業務]。類似wcf這種東西的話,還有序列化跟反序列化的情況[序列化跟反序列化是性能開銷比較大的,例如序列化是通過反射來實現的,反射又是跟程序集的元數據有關的,屬於運行時行為],假如是自己實現tcp通信模型,就不一定會有序列化跟反序列化的通信模型了,而且wcf為了讓通信跟本地調用那樣以及標準的方面,位元組流都是比較大的,這里也會增加通信的帶寬【好比自定義的協議4個位元組的數據包長度+1個位元組的加密壓縮位+N個數據包位+X個位元組的檢驗位,這種的話實際用到的位元組就比較少了,因為在數據包裡面,可以會用2個位元組表示協議頭,例如ox0A表示登錄介面,再用4個位元組表示登錄名,4個位元組表示密碼等】。以上是簡單的對socket跟wcf\ws等協議的差別說明。socket跟wcf\ws對比的話,socket性能是最高的,高並發高響應的時候,這里是有差距的,技術上的話,socket需要更加多的技術支持[開發周期長,對人員要求高],而wcf在應用層面上基本無難度,就是一些配置,出現問題也大部分可以通過網路來處理。另外一個就是託管語言本身的問題,GC這塊的,GC回收的時候,是需要掛起堆棧上的線程的,而且GC的線程優先順序比自己所能創建的所有線程的優先順序都要高,等GC執行完畢的時候才能去執行自己的線程,wcf在堆對象上申請的空間也會更加多,自然導致GC會受到的概率也會更加大,這里也會可能導致wcf性能不如socket。基本上來說,C#的類都是引用對象,都是堆申請的,在引用計數超出的時候,都會被下一個GC[]操作去回收,真是個奇葩的事情。
總之,在ws跟wcf之間選擇的話,個人覺得優先選擇wcf好點。
如果是對性能要求較高[高並發等],或者是長連接再或者是需要用到UDP這種的話,就基本上無法用wcf跟ws這種了,wcf是沒有udp協議的,http協議也只是在tcp協議下的上層協議,底層發送的數據包跟實作是不通的。另外對於長連接,雖然wcf提供了類似回調這種情況機制,只是個人不推薦使用在這種長連接的場合下。
㈣ Zbrush教程:怎樣位移,縮放和旋轉
你可以先去【繪學霸】網站找「zbursh建模」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-11y04r-2014960261701890308
想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】: www.huixueba.com.cn/school/3dmodel?type=4&zdhhr-11y04r-2014960261701890308
在「zbursh建模」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
㈤ 如何利用Leap Motion創建支持手勢操控的Web游戲
正式開始
Leap Motion
JavaScript庫依賴於WebSockets將來自控制器的數據提交並顯示在用戶的Web瀏覽器之上。WebSockets標準的設計目標在於允許JavaScript代碼運行在網頁當中,從而確保網頁與遠程伺服器之間始終保持有長效連接——這一特性通常被用於創建基於瀏覽器的聊天客戶端以及其它一些實時類Web應用程序。
當用戶部署好了自己的Leap
Motion設備、並為其安裝了附帶的軟體及驅動程序之後,其中作為內置軟體組件之一的輕量級WebSocket伺服器就會運行在用戶計算機的後台進程當中。由Leap
Motion控制器捕捉到的數據會被發往WebSocket伺服器,這是為了能夠讓相關數據直接交由Web瀏覽器使用、而無需另行安裝額外的瀏覽器插件。Leap
Motion JavaScript庫與本地WebSocket伺服器相連,負責捕捉數據並利用部分簡單API進行打包以保證其易於使用。
作為開發工作的第一步,讓我們首先創建一個網頁,並在其中載入Leap Motion
JavaScript庫、獲取來自設備的數據並記錄下瀏覽器調試控制台中的部分數據:
<html>
<head>
<script src="http://js.leapmotion.com/leap-0.4.2.js"></script>
</head>
<body>
</body>
<script type="text/javascript">
Leap.loop(function(frame) {
if (frame.pointables.length > 0)
console.log(frame.pointables);
});
</script> </html>
上述代碼的head元素中包含一個script標簽,它的作用是從公司的CDN處下載Leap Motion JavaScript庫。Leap
Motion針對生產使用環境推出一套精簡版本,此外還針對開發用途提供非精簡版本。在這里我們使用的是非精簡版本,這是為了能夠在需要使用瀏覽器的JavaScript調試器時能夠更輕松地對代碼進行單步調試。大家可以點擊此處訪問Leap Motion官方網站,並在這里下載到前面提到的這兩種版本。
在第二個script標簽中,也就是頁面body之下,我們利用Leap.loop方法對來自設備的數據進行捕捉。Leap
Motion驅動程序會發出數據「幀(frame)」,這些幀也就是經過處理的控制器視頻流快照。該軟體每秒大約會產生30幀數據,從而持續不斷地為應用程序的運行提供必要信息。被傳遞至該loop中的匿名函數在每次接收到新幀時都會執行一次。
Leap Motion
API大大簡化了對手部、手指以及工具位置的檢測流程。這里的「工具」被認定為一種延長狀物體,例如鉛筆,其中一端由用戶把持在手中。在Leap
Motion的表述體系當中,通用術語「指向物(pointable)」被用於描述作為工具或者手指存在的對象。幀對象當中包含一項名為pointables的屬性,用於顯示一系列顯示在幀內的指向物對象。
在前面的示例中,每一幀內所包含的一系列pointables都被輸出至控制台當中。如果大家檢查這些被推送至控制台的指向物對象,就會發現其中有多項屬性被用於描述顯示信息——例如指向物的長度與寬度、指向物末端的空間坐標以及該指向物末端的移動速度等。
在火狐開發者控制台中查看指向物對象。
計算標准化手指位置
利用指向物數據,我們將建立一套簡單的演示範例,用戶可以利用它通過移動手指控制屏幕上某個元素的位置。第一步,我們需要獲取指尖的具體位置。下面的示例代碼為如何獲取單個指向物的原始坐標:
Leap.loop(function(frame)
{ if (frame.pointables.length > 0)
{ var position = frame.pointables[0].tipPosition;
console.log("X: " + position[0] + " Y: " + position[1]);
}
});
在多數情況下,大家都會優先使用Leap Motion軟體所提供的自動穩定功能,而不太可能直接使用原始tipPosition數據。Leap
Motion控制器會以極高的精度對圖像中的活動對象加以檢測,並從中甄別出使用者手部幾乎難以察覺的細微搖晃及活動。另一項名為stabilizedTipPosition的備選屬性則允許我們收集同樣的數據,但在結果中過濾掉上述細微活動。現在我們已經獲得了用戶手指的物理坐標,接下來要做的就是將其與瀏覽器窗口內的位置進行關聯。
在Leap Motion的術語體系中,由控制器加以追蹤的大型虛擬空間被稱為互動框(interaction
box)。幀對象的interactionBox屬性當中包含多種方法與屬性,它們負責提供與互動框及其維度相關的具體信息。它採用一種便捷的標准化方法,即將某個物理點的原始坐標換算成能夠代表該點在互動框中相對位置的等效數值。
標准化定位機制非常實用,因為它能幫助我們獲取手指的原始位置、並將其與應用程序窗口中的對應點加以映射。標准化坐標使用浮點數值格式,具體數值在0到1之間浮動。要想獲取瀏覽器窗口中對應點的相對數值,大家只需將X與Y值同目標區域的高度與寬度相乘即可:
Leap.loop(function(frame) {
if (frame.pointables.length > 0) {
var position = frame.pointables[0].stabilizedTipPosition;
var normalized = frame.interactionBox.normalizePoint(position);
var x = window.innerWidth * normalized[0];
var y = window.innerHeight * (1 - normalized[1]);
console.log("X: " + x + " Y: " + y);
}
});
在屏幕上繪制手指位置
利用標准化定位機制,現在我們已經可以在網頁上繪制手指的具體位置。為了簡單起見,這篇文章將只向大家展示如何利用DOM元素實現這一目標。只需創建一個具備絕對位置的div,而後將其top與left屬性分別設置為對應的X與Y坐標,我們就能將Leap
Motion loop中的標准化函數用於定位:
<html>
<head>
<script src="http://js.leapmotion.com/leap-0.4.2.js"></script>
<style type="text/css">
#position {
width: 25px;
height: 25px;
position: absolute;
background-color: blue;
}
</style>
</head>
<body>
<div id="position"></div>
</body>
<script type="text/javascript">
Leap.loop(function(frame) {
if (frame.pointables.length > 0) {
var position = frame.pointables[0].stabilizedTipPosition;
var normalized = frame.interactionBox.normalizePoint(position);
var element = document.getElementById("position");
element.style.left = window.innerWidth * normalized[0];
element.style.top = window.innerHeight * (1 - normalized[1]);
}
});
</script>
</html>
這樣一來,當用戶在Leap
Motion控制器前方移動自己的手指時,屏幕上的div元素也將隨之發生位移。在目前為止的示例中,我們只涉及單一手指的處理,也就是使用pointables數組中的第一個元素。在接下來的示例中,我們將逐步探尋數組中第一個元素的作用、從而使每根手指都成為可操作對象。這一次,我們將在HTML
5 Canvas上描繪手指位置、而不再使用DOM元素:
<html>
<head>
<script src="http://js.leapmotion.com/leap-0.4.2.js"></script>
</head>
<body>
<canvas id="canvas" width="800" height="600"></canvas>
</body>
<script type="text/javascript">
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
Leap.loop({frameEventName: "animationFrame"}, function(frame) {
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
frame.pointables.forEach(function(pointable) {
var position = pointable.stabilizedTipPosition;
var normalized = frame.interactionBox.normalizePoint(position);
var x = ctx.canvas.width * normalized[0];
var y = ctx.canvas.height * (1 - normalized[1]);
ctx.beginPath();
ctx.rect(x, y, 20, 20);
ctx.fill();
});
});
</script>
</html>
在上面的示例中,我們利用forEach方法對pointable項目進行了遍歷。它會對每一個標准化位置進行識別,而後將其作為矩形繪制在屏幕當中。此外,clearRect方法在處理每一幀圖像時都會被調用一次,旨在確保前一幀所繪制的矩形切實得到清除。
上述示例當中還引入了另一項新功能,即frameEventName選項。在默認狀態下,Leap.loop回調將被調用至每一個提取自Leap
Motion控制器的幀數據。對frameEventName選項中的「animationFrame」值進行設置會改變這一行為機制,從而令Leap.loop與瀏覽器的繪制周期保持一致。它會利用瀏覽器的requestAnimationFrame
API,從而確保該回調只在瀏覽器准備進行繪制時被調用。
檢測手勢
除了手指位置,Leap Motion SDK還能夠識別出其它幾種手勢動作,其中包括掃動與點觸。Leap
Motion幀對象當中包含一個手勢屬性,能夠提取從幀數據中檢測出的一系列手勢信息。以下示例代碼顯示了如何對掃動手勢進行迭代、對其起始與結束位置進行標准化處理並最終將結果繪制在Canvs當中:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var options = {
enableGestures: true, frameEventName: "animationFrame" };
Leap.loop(options, function(frame) {
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
frame.gestures.forEach(function(gesture) {
if (gesture.type != "swipe") return;
var start = frame.interactionBox.normalizePoint(gesture.startPosition);
var end = frame.interactionBox.normalizePoint(gesture.position);
var startX = ctx.canvas.width * start[0];
var startY = ctx.canvas.width * (1 - start[1]);
var endX = ctx.canvas.width * end[0];
var endY = ctx.canvas.width * (1 - end[1]);
ctx.beginPath();
ctx.moveTo(startX, startY);
ctx.lineTo(endX, endY);
ctx.stroke();
});
});
Leap Motion
SDK在默認狀態下不會顯示手勢。為了獲取手勢數據,我們必須將選項對象的enableGestures屬性設為true,而後再將其傳遞至Leap.loop方法當中。如果該選項沒有經過設置,那麼frame.gestures數組將直接為空。
每一種手勢都具備一項type屬性,用於描述該手勢的相關性質。在forEach
loop當中,首先利用條件表達式來忽略不屬於掃動的手勢動作。接下來,利用interactionBox對手勢的起始與結束位置進行標准化處理。最後,利用標准Canvas繪制API來描繪由起始位置到結束位置的線條。
在面對Leap
Motion設備進行手部掃動操作時,大家應該能夠在Canvas上看到自己的動作軌跡線條。手勢檢測在更為廣義的互動操作之下起著非常關鍵的作用。舉例來說,大家可以通過向左或者向右的掃動操作幫助用戶導航至相冊界面的上一個或者下一個顯示條目當中。
㈥ CSS3中的動畫效果transform:translateZ(),在Z軸上移動xx距離
下面這個代碼在Chrome上運行沒問題啊:
其他瀏覽器上如果沒效果,可自行添加前綴再試。注意:只有IE10+、FireFox、Chrome、Safari才支持3D轉換效果。
拓展:
1、CSS即層疊樣式表(CascadingStyleSheet)。 在網頁製作時採用層疊樣式表技術,可以有效地對頁面的布局、字體、顏色、背景和其它效果實現更加精確的控制。
2、CSS3是CSS技術的升級版本,CSS3語言開發是朝著模塊化發展的。以前的規范作為一個模塊實在是太龐大而且比較復雜,所以,把它分解為一些小的模塊,更多新的模塊也被加入進來。這些模塊包括: 盒子模型、列表模塊、超鏈接方式 、語言模塊 、背景和邊框 、文字特效 、多欄布局等。
㈦ 用AE如何製作位移循環動畫(圖例:每行的數字列一直循環移動)
你可以先去【繪學霸】網站找「C4D/AE/影視後期包裝」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=314&zdhhr-11y04r-751007826705969132
想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】: www.cgwang.com/course/ysbzcoursemobilecheck/?zdhhr-11y04r-751007826705969132
在「C4D/AE/影視後期包裝」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
㈧ ios如何實現室內精確測量位移
位移枚舉:
一般都採用C語言的方式定義枚舉,這種枚舉可以稱為普通的枚舉。
"位移枚舉"是C語言中遺留下來的一種很古老並且好用的技術延用至今。只需要定義一個參數,就可以通過傳入不同的枚舉組合,達到想要的效果。所以蘋果在iOS6和Mac OS 10.8以後引入了兩個宏NS_OPTIONS和NS_ENUM來定義枚舉類型,實際上是將enum定義和typedef合二為一,NS_ENUM和NS_OPTIONS本質是一樣的,僅僅從字面上來區分其用途,採用不同的宏來從代碼角度來區分。
㈨ 學習WebGL需要哪些常識性的知識
JavaScript和OpenGL ES 2.0。