Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产999在线,最近中文字幕无免费,免费高清日本中文

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          手指和手掌骨折后的康復(fù)方案

          骨和掌骨骨折后,應(yīng)對(duì)穩(wěn)定型的骨折進(jìn)行手法復(fù)位和外固定,對(duì)非穩(wěn)定型骨折實(shí)施手術(shù)復(fù)位和內(nèi)固定,并在復(fù)位準(zhǔn)確、固定可靠的情況下,參考如下方案進(jìn)行康復(fù)。

          第一階段
          在復(fù)位和固定1周內(nèi),康復(fù)治療的主要目標(biāo)是控制和消除腫脹。
          1、腫脹的控制。通過(guò)抬高、冰敷、適當(dāng)加壓包扎、休息等方式控制腫脹,可采用超短波(無(wú)熱或微熱)、磁療等方法輔助消腫,必要時(shí)進(jìn)行抗炎、脫水治療。
          2、活動(dòng)度訓(xùn)練。保守治療者,對(duì)未受累的關(guān)節(jié)(手部各關(guān)節(jié)、腕、肘等)進(jìn)行主動(dòng)活動(dòng);手術(shù)治療且固定牢靠者,可對(duì)骨折鄰近關(guān)節(jié)進(jìn)行輕柔的主動(dòng)活動(dòng)。
          3、腫脹消退后適時(shí)調(diào)整外固定支具。

          第二階段
          復(fù)位和固定2-3周,康復(fù)治療的主要目標(biāo)是防止粘連、促進(jìn)愈合。與此同時(shí),應(yīng)繼續(xù)控制腫脹。
          1、繼續(xù)采用上述方法控制腫脹。可暫時(shí)去除支具進(jìn)行輕柔的向心性按摩,穩(wěn)定的內(nèi)固定者可使用壓力手套,保守治療者和術(shù)后拆線者可進(jìn)行冷熱水交替浴。
          2、繼續(xù)對(duì)未受累的手指和關(guān)節(jié)進(jìn)行活動(dòng)度練習(xí)和肌腱滑動(dòng)練習(xí),對(duì)受累手指未固定的關(guān)節(jié)進(jìn)行活動(dòng)度練習(xí)肌腱滑動(dòng)練習(xí)(內(nèi)固定比較穩(wěn)定的,也可臨時(shí)卸下支具進(jìn)行主動(dòng)的活動(dòng)度練習(xí)和肌腱滑動(dòng)練習(xí))。關(guān)節(jié)活動(dòng)度練習(xí)和肌腱滑動(dòng)練習(xí)是這個(gè)階段的關(guān)鍵所在,練習(xí)要全面、充分,可以有效防止軟組織粘連,同時(shí)還可促進(jìn)軟組織和骨骼的愈合。需要注意的是,第一掌骨基底骨折者應(yīng)避免強(qiáng)行對(duì)掌活動(dòng)。
          3、功能性功能及力量練習(xí)??稍谥Ь吖潭ㄏ逻M(jìn)行輕柔的功能性活動(dòng);避免抗阻力活動(dòng)。

          第三階段
          復(fù)位和固定4-7周,康復(fù)治療的主要目標(biāo)是恢復(fù)活動(dòng)度、力量和功能,消除已經(jīng)發(fā)生的軟組織粘連。在骨折基本愈合的情況下(用X光進(jìn)行檢查),可拆除支具(或者只在夜間休息及必要時(shí)使用支具)。
          1、活動(dòng)度練習(xí)。未受累掌骨和指骨活動(dòng)度的全面恢復(fù);骨折鄰近關(guān)節(jié)的主被動(dòng)活動(dòng)度練習(xí)(保護(hù)骨折部位);非骨折鄰近關(guān)節(jié)活動(dòng)受限的情況下,可進(jìn)行牽拉練習(xí)和關(guān)節(jié)松動(dòng)。在活動(dòng)度練習(xí)前可熱敷,練習(xí)后可冰敷。
          2、消除已經(jīng)產(chǎn)生的粘連。繼續(xù)肌腱滑動(dòng)練習(xí);主動(dòng)背伸受限的情況下,若指間關(guān)節(jié)伸肌遲滯,可在指掌關(guān)節(jié)屈曲位重點(diǎn)進(jìn)行指間關(guān)節(jié)伸展練習(xí),若指掌關(guān)節(jié)伸肌遲滯,則可在指間關(guān)節(jié)屈曲狀態(tài)下重點(diǎn)進(jìn)行指掌關(guān)節(jié)伸展練習(xí)。
          3、力量訓(xùn)練,在5-6周時(shí),可利用橡皮筋、海綿球、硅膠團(tuán)等工具進(jìn)行手指力量及握力訓(xùn)練(保守治療愈合不充分的情況下,練習(xí)時(shí)機(jī)可適當(dāng)推遲)。
          4、功能性活動(dòng)。愈合良好的情況下可進(jìn)行輕量日?;顒?dòng);否則,應(yīng)在支具的保護(hù)下進(jìn)行輕量日常活動(dòng)。

          第四階段
          復(fù)位并固定8周以后。此階段的目標(biāo)在于獲得全面恢復(fù)。
          1、活動(dòng)度練習(xí)。進(jìn)行全范圍的活動(dòng)度練習(xí),在愈合良好的情況下可進(jìn)行外力輔助的牽拉練習(xí),或者使用動(dòng)力型支具及矯形器進(jìn)行長(zhǎng)時(shí)間、小力量的矯正。
          2、力量訓(xùn)練。逐步開(kāi)展全面的力量訓(xùn)練,使各個(gè)關(guān)節(jié)、各個(gè)肌肉的力量獲得基本恢復(fù)(可與健側(cè)對(duì)比)。
          3、功能練習(xí)。逐步恢復(fù)到正常的日?;顒?dòng),對(duì)不熟練、不協(xié)調(diào)的功能進(jìn)行有針對(duì)性的反復(fù)訓(xùn)練,獲得最佳神經(jīng)肌肉協(xié)調(diào)性。

          原文鏈接:http://www.jinlaiba.com/archives/32368.html

          器之心報(bào)道

          編輯:杜偉、陳萍

          有了這個(gè)項(xiàng)目,大家終于可以親身體驗(yàn)一把人體姿態(tài)估計(jì)成像的神奇之處了!

          在 CV 領(lǐng)域,人體姿態(tài)估計(jì)(human pose estimation)利用目標(biāo)檢測(cè)模型和姿態(tài)估計(jì)模型來(lái)識(shí)別出人體各個(gè)關(guān)節(jié)的位置和網(wǎng)格,并已在動(dòng)作識(shí)別、動(dòng)畫(huà)、游戲、運(yùn)動(dòng)捕捉系統(tǒng)中有著廣泛的應(yīng)用。

          但遺憾的是,人體姿態(tài)估計(jì)常常見(jiàn)諸于學(xué)術(shù)研究中,普通讀者很難親身體驗(yàn)它的神奇成像效果。

          近日,機(jī)器之心在 GitHub 上發(fā)現(xiàn)了一個(gè)有趣的項(xiàng)目「air-drawing」,作者創(chuàng)建了一個(gè)利用深度學(xué)習(xí)的工具,使你在配有攝像頭的電腦端可以獲得自己的手勢(shì)姿態(tài)估計(jì)成像圖

          項(xiàng)目地址:https://github.com/loicmagne/air-drawing

          此外,作者使用的深度學(xué)習(xí)模型還可以預(yù)測(cè)「向上」或「向下」的手勢(shì)動(dòng)作。動(dòng)態(tài)效果展示圖如下:

          小編也嘗試在自己的電腦上捕捉到了手勢(shì)姿態(tài)估計(jì)網(wǎng)格圖:


          然后試著寫(xiě)了兩個(gè)字「中國(guó)」,不知各位讀者認(rèn)得出來(lái)嗎?!


          試玩地址:https://loicmagne.github.io/air-drawing/

          作者表示,試玩過(guò)程中不會(huì)收集用戶信息。作者還優(yōu)化了代碼,使得該工具可以在大多數(shù)電腦上運(yùn)行。電腦上的網(wǎng)絡(luò)攝像頭質(zhì)量會(huì)對(duì)成像效果產(chǎn)生影響,調(diào)高屏幕亮度有助于更快地觸發(fā)攝像頭,并提升快門(mén)速度和幀率。如果手部一部分在框架之外,則手部檢測(cè)無(wú)法正常工作。在繪圖寫(xiě)字時(shí),保持手指向上,手指向下時(shí)會(huì)影響指尖的檢測(cè)。

          技術(shù)細(xì)節(jié)

          這個(gè)可以隔空作畫(huà)的工具使用深度學(xué)習(xí)來(lái)完成,實(shí)現(xiàn) pipeline 包含兩個(gè)步驟:手勢(shì)檢測(cè)以及預(yù)測(cè)所要畫(huà)的圖,這兩個(gè)過(guò)程都是通過(guò)深度學(xué)習(xí)來(lái)完成的。其中,手勢(shì)檢測(cè)使用了手部追蹤解決方案 MediaPipe toolbox。

          MediaPipe toolbox 項(xiàng)目地址:https://google.github.io/mediapipe/solutions/hands.html

          繪圖預(yù)測(cè)部分只用到了手指位置相關(guān)技術(shù)。輸入是一個(gè) 2D 點(diǎn)序列(實(shí)際上,該項(xiàng)目使用的是手指的速度和加速度,而不是位置,來(lái)保持預(yù)測(cè)的平移不變),輸出是二元分類「向上(pencil up)」或「向下(pencil down)」。


          此外,項(xiàng)目作者還使用了簡(jiǎn)單的雙向 LSTM 架構(gòu),并且做了一個(gè)小數(shù)據(jù)集(大約 50 個(gè)樣本),數(shù)據(jù)標(biāo)注使用「python-stuff/data-wrangling/」工具。一開(kāi)始,項(xiàng)目作者想做一個(gè)實(shí)時(shí)的「向上 / 向下」預(yù)測(cè),即在用戶繪畫(huà)的同時(shí)做出預(yù)測(cè)。然而,由于任務(wù)太難,導(dǎo)致結(jié)果很差,因此采用雙向 LSTM。

          關(guān)于深度學(xué)習(xí) pipeline 細(xì)節(jié),你可以在 jupyter-notebook 中的 python-stuff/deep-learning / 了解更多信息。

          該應(yīng)用程序可以在用戶端使用,作者將 PyTorch 模型轉(zhuǎn)換為. onnx,然后使用 ONNX Runtime,它非常方便,可以兼容很多層。

          總體來(lái)說(shuō),這個(gè) pipeline 還需要進(jìn)一步完善,一些改進(jìn)的想法包括:

          • 使用更大的數(shù)據(jù)集和更多的用戶數(shù)據(jù);
          • 對(duì)手指信號(hào)進(jìn)行處理和平滑,減少對(duì)相機(jī)質(zhì)量的依賴,提高模型的泛化能力。

          作者答疑

          可以隔空繪畫(huà)的這個(gè)項(xiàng)目引來(lái)了眾多網(wǎng)友的討論,有人不禁感慨,「這太酷了!讓我想起迪士尼的廣告,他們會(huì)用發(fā)光的魔杖畫(huà)出米老鼠的頭?!?/span>

          在網(wǎng)友表達(dá)驚喜的同時(shí),也有人提出了自己的疑惑。項(xiàng)目作者在 reddit 上對(duì)部分網(wǎng)友的的疑問(wèn)進(jìn)行解答,我們列舉其中一部分。

          有網(wǎng)友表示,這是一個(gè)不錯(cuò)的項(xiàng)目,并有疑問(wèn)——RNN 是從頭開(kāi)始訓(xùn)練的,還是在預(yù)訓(xùn)練模型的基礎(chǔ)上進(jìn)行微調(diào)的?

          作者表示:「模型是從頭開(kāi)始訓(xùn)練的,但使用預(yù)訓(xùn)練模型可能是一個(gè)不錯(cuò)的建議。」


          還有網(wǎng)友提問(wèn):「預(yù)測(cè)是實(shí)時(shí)的嗎?那樣的話,這將是一個(gè)真正的魔法。」

          作者表示,預(yù)測(cè)是實(shí)時(shí)的。但遺憾的是,實(shí)時(shí)性能不是很好,所以必須使用雙向 LSTM。

          還有網(wǎng)友建議「使用 transformer 可以獲得更好的性能」。

          對(duì)于這個(gè)建議,作者表示自己曾嘗試過(guò)自注意力層,但是結(jié)果并不理想。如果有一個(gè)更大數(shù)據(jù)集的話,采用 transformer 效果會(huì)更好。

          參考鏈接:

          https://www.reddit.com/r/MachineLearning/comments/pmqtj9/p_using_deep_learning_to_draw_and_write_with_your/

          隨著近幾年移動(dòng)營(yíng)銷頁(yè)的火爆,催生了一個(gè)中國(guó)式的名詞「H5」。而 H5 最常見(jiàn)的形態(tài)就是類似幻燈片翻頁(yè)效果。

          我們需要制作 H5 的時(shí)候,最快的辦法就是使用一些滑動(dòng)插件庫(kù),如 iDangero.us 出品的 Swiper,百度 BE-FE 出品的 iSlider。通過(guò)這些翻頁(yè)庫(kù)提供的強(qiáng)大的配置功能,我們就能實(shí)現(xiàn)很酷炫的翻頁(yè)效果。當(dāng)然,這些庫(kù)還支持自動(dòng)播放,點(diǎn)擊切換和當(dāng)前頁(yè)面指示等配置,所以還能用在網(wǎng)頁(yè)上,實(shí)現(xiàn)一些 web carousel 的效果。

          百度 H5 也先后使用了 Swiper 和 iSlider 作為 H5 運(yùn)行時(shí)的翻頁(yè)框架,隨著用戶越來(lái)越多,也遇到了一些問(wèn)題:

          1. H5 平臺(tái)和這些庫(kù)不能很好貼合,有些配置項(xiàng)用不上,而有些必要的功能需要「Hack」的方式實(shí)現(xiàn)。
          2. 一些 H5 的元素多、動(dòng)畫(huà)多,在低端機(jī)型上翻頁(yè)時(shí),翻頁(yè)時(shí)會(huì)有「卡頓感」和「粘滯感」,用戶體驗(yàn)不好。

          而我們希望的 H5 翻頁(yè)庫(kù)能和平臺(tái)本身的功能完美貼合,在保持體積小的同時(shí),在翻頁(yè)的時(shí)候能做到「絲般順滑」。于是我們就開(kāi)始了研(zao)究(lun)之(zi)旅。

          開(kāi)始

          H5 滑屏框架的開(kāi)發(fā),第一個(gè)問(wèn)題就是:頁(yè)面是否跟隨手指滑動(dòng)?這也是騰訊 ISUX 團(tuán)隊(duì)的《滑屏 H5 開(kāi)發(fā)實(shí)踐九問(wèn)》的第一問(wèn)(這篇文章原文出處現(xiàn)在是 404 ,大家可以在其他的轉(zhuǎn)載網(wǎng)站看到),這里用這篇文章的圖片說(shuō)明一下這個(gè)問(wèn)題。

          上圖:不跟隨手指滑動(dòng),下圖:跟隨手指滑動(dòng)。

          左邊的是不跟隨手指滑動(dòng),只需要關(guān)注手指觸碰開(kāi)始和離開(kāi)兩個(gè)時(shí)間點(diǎn),中間過(guò)程不用考慮。所以實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單。但是用戶的操作沒(méi)有實(shí)時(shí)的反饋,體驗(yàn)不夠好。因此,盡管實(shí)現(xiàn)起來(lái)更復(fù)雜,我們?nèi)匀粵Q定實(shí)現(xiàn)前一種「跟隨手指滑動(dòng)」的效果。

          起步

          下圖是跟隨手指滑動(dòng)的 H5 最直觀的版本,所有的「頁(yè)面」依次從上到下,首尾相接。需要說(shuō)明一下,這里的「頁(yè)面」打引號(hào),是因?yàn)閷?shí)際上他們都是 div,后文說(shuō)的頁(yè)面都指這些 div。同時(shí),我們這里以最常見(jiàn)的豎直方向滑動(dòng)為例,水平方向同理。

          基本原理圖

          這些 div 的寬度和高度都是 100% 的容器高度,可視區(qū)域是中間的部分,我們監(jiān)聽(tīng) touchstart, touchmove, touchend 事件,跟鼠標(biāo)拖拽的原理類似:

          1. touchstart 時(shí),記下起點(diǎn)位置;
          2. touchmove 實(shí)時(shí)計(jì)算滑動(dòng)的距離,讓所有頁(yè)面一起沿著 Y 軸 translate 這段距離。
          3. touchend 時(shí),能得到最終的滑動(dòng)距離,跟設(shè)定的閾值比較。進(jìn)入到頁(yè)面自動(dòng)控制階段:大于閾值則讓頁(yè)面滑動(dòng)到下一頁(yè),小于閾值則恢復(fù)到起始位置。

          深入探究

          簡(jiǎn)單的版本在上一部分很容易就實(shí)現(xiàn)了,如果其他需求不多,頁(yè)面上元素和動(dòng)畫(huà)比較少,基本上就夠用了。但是本文要探究的是如何能做到「絲般順滑」,其實(shí)就是兩個(gè)字:性能。

          性能的瓶頸是什么呢?

          我們的目標(biāo)是:在「三多一低」(頁(yè)面多、元素多、動(dòng)畫(huà)多,配置低)的情況下,滑動(dòng)翻頁(yè)時(shí),盡可能不產(chǎn)生卡頓。

          我們分成兩部分來(lái)看這問(wèn)題:手指離開(kāi)屏幕前和手指離開(kāi)屏幕后。

          手指離開(kāi)屏幕前

          此時(shí)比較耗費(fèi)性能的操作是:當(dāng) touchmove 觸發(fā)時(shí),計(jì)算出了要移動(dòng)的距離,所有的頁(yè)面都需要沿著 Y 軸移動(dòng)相同的距離。此時(shí)必然免不了進(jìn)行 DOM 操作,而 DOM 操作是非?!赴嘿F」的,再加上 touchmove 事件的頻繁觸發(fā),性能處理不夠好的話,很容易出現(xiàn)卡頓。

          為了優(yōu)化性能,我們很自然的想到一個(gè)策略:減少 DOM 操作。

          這里面包含兩部分:減少 DOM 操作的元素和減少 DOM 操作的屬性。前者比如,看不到的頁(yè)面不參與動(dòng)畫(huà)。后者比如,只改變?cè)氐?css 屬性的一個(gè)或幾個(gè)。

          減少 DOM 操作的元素

          最開(kāi)始簡(jiǎn)易的版本的例子中,touchmove 觸發(fā)時(shí),所有的頁(yè)面都沿著 Y 軸移動(dòng)。其實(shí)沒(méi)有必要,因?yàn)橄喈?dāng)一部分頁(yè)面是看不見(jiàn)的。那一般情況下,我們最少需要操作幾個(gè)頁(yè)面呢?答案是兩個(gè)??梢曰叵胍幌?,我們滑動(dòng)的時(shí)候,最多能同時(shí)看到兩個(gè)頁(yè)面。這個(gè)方法相對(duì)于所有的頁(yè)面一起移動(dòng),成倍地提升性能。

          減少 DOM 操作的屬性

          這個(gè)方法的主要意思是,只需要操作一次 DOM 能達(dá)到的效果,絕不用兩次。實(shí)際上,對(duì)于 slide 動(dòng)畫(huà),我們只需要改變頁(yè)面的 transform的值,其他的 DOM 操作(增加 class,修改元素的 innerHTML)等能不做就不做。

          我們得到了一個(gè)初步的方案:初始化時(shí),所有的頁(yè)面一次性全部置入 container,除了我們用到的兩頁(yè),display 屬性都設(shè)置為 none。touchmove 的時(shí)候,只有這兩頁(yè)的 transform 屬性有變化。

          touchmove 的過(guò)程,我們可以寫(xiě)成數(shù)學(xué)表達(dá)式:

          s=f(x),x∈[0,sideLength]

          s=f(x),x∈[0,sideLength]

          x

          x 表示手指滑動(dòng)的距離,s

          s 表示頁(yè)面滑動(dòng)距離,sideLength

          sideLength 是當(dāng)前滑動(dòng)邊的長(zhǎng)度,如果是沿 y 軸滑動(dòng),則是頁(yè)面高度。寫(xiě)到這里,就跟時(shí)下很流行的「數(shù)據(jù)驅(qū)動(dòng)」的概念很類似了。我們要實(shí)現(xiàn)的就只有一個(gè) render 函數(shù),輸入是用戶的交互數(shù)據(jù),輸出是頁(yè)面表現(xiàn)。

          手指離開(kāi)屏幕后

          當(dāng)手指離開(kāi)屏幕時(shí),我們就已經(jīng)知道了這次滑動(dòng)的結(jié)果(向上還是向下?翻頁(yè)還是回彈?),要實(shí)現(xiàn)的只是動(dòng)畫(huà)效果,我們有兩個(gè)選擇:

          方案一:復(fù)用 touchmove 的 render 邏輯,按照手指滑動(dòng)的速度,使用 requestAnimationFrame 控制動(dòng)畫(huà);

          方案二:使用 css3 transition 動(dòng)畫(huà);

          方案一的優(yōu)點(diǎn)在于:可以在手指滑動(dòng)和動(dòng)畫(huà)過(guò)程使用同樣的 render 函數(shù),最大限度復(fù)用了代碼,邏輯統(tǒng)一;同時(shí)可以精確控制動(dòng)畫(huà)的每一幀,動(dòng)畫(huà)曲線會(huì)比較流暢。 缺點(diǎn)就是可能存在的性能問(wèn)題。方案二跟方案一剛好相反。其實(shí)說(shuō)到底還是 js 動(dòng)畫(huà) vs css 動(dòng)畫(huà)的問(wèn)題。

          動(dòng)畫(huà)性能實(shí)驗(yàn)

          為了比較兩個(gè)方案在 H5 翻頁(yè)動(dòng)畫(huà)上的性能優(yōu)劣,我們?nèi)∫粋€(gè)稍微復(fù)雜點(diǎn)的例子:

          H5:百度無(wú)人車招聘的 H5

          動(dòng)畫(huà):從第 1 頁(yè)翻到第 2 頁(yè)

          CPU: 6 * slowdown

          瀏覽器:Chrome 61.0.3163.100(64 位)

          js 動(dòng)畫(huà)方案:點(diǎn)擊這里

          css 動(dòng)畫(huà)方案:點(diǎn)擊這里

          js 翻頁(yè)動(dòng)畫(huà)方案,Profile 結(jié)果

          css 翻頁(yè)動(dòng)畫(huà)方案,Profile 結(jié)果

          通過(guò)實(shí)驗(yàn)我們可以看到,js 的動(dòng)畫(huà)過(guò)程中,幀率大多維持在 30 fps 上下。而 css 動(dòng)畫(huà),基本都在 60 fps 上下。而且在動(dòng)畫(huà)過(guò)程中,明顯感覺(jué) js 動(dòng)畫(huà)有卡頓。這種情況在一些 CPU 和顯卡配置相對(duì)低的 Android 機(jī)型上尤為明顯。對(duì)于這個(gè)問(wèn)題有興趣的同學(xué),可以看一下 swiper 庫(kù)的 raf 分支,這是本次對(duì)比測(cè)試所用到的 js 。

          所以,盡管 js 的動(dòng)畫(huà)方案看起來(lái)比較「優(yōu)雅」,能用「數(shù)據(jù)驅(qū)動(dòng)」的理念,統(tǒng)一解決滑動(dòng)過(guò)程和動(dòng)畫(huà)過(guò)程的問(wèn)題。實(shí)際上性能有瓶頸,我們只能在手指離開(kāi)屏幕后,采用 css 的動(dòng)畫(huà)方案以保證性能。正應(yīng)了一句話「能用 css 做的,絕對(duì)不要用 js 解決」。

          實(shí)施方案

          下圖形象地展示了我們實(shí)施的基本思路,只有兩頁(yè):

          currentPage :當(dāng)前頁(yè)面

          activePage:即將要翻到的下一頁(yè)

          其余的頁(yè)面都是初始化的時(shí)候加載進(jìn) DOM 結(jié)構(gòu),但是 display 為 none 并且 z-index 都是 0。這里展示「層疊」的狀態(tài)是為了更形象的展示。

          swiper 原理圖

          為了方便獲取頁(yè)面,我們采用雙向鏈表保存頁(yè)面結(jié)構(gòu)。每個(gè) page 具有 prev 和 next 分別指向上一個(gè)和下一個(gè) page。

          我們重點(diǎn)要關(guān)注的是,怎么樣確定 activePage ?即下一個(gè)要去到的頁(yè)面。答案很簡(jiǎn)單,其實(shí),當(dāng)用戶開(kāi)始觸碰屏幕,并且滑動(dòng)的時(shí)候,就能確定了:

          1. 滑動(dòng)距離 x < 0,表示頁(yè)面向上滑動(dòng),此時(shí) activepage = currentPage.next
          2. 滑動(dòng)距離 x > 0,表示頁(yè)面向下滑動(dòng),此時(shí) activepage = currentPage.prev

          擴(kuò)展

          翻頁(yè)效果

          我們舉的例子中的翻頁(yè)效果是最普通的滑動(dòng)效果。怎么樣擴(kuò)展支持立方體、翻轉(zhuǎn)等效果呢?可以回頭看看「手指離開(kāi)屏幕前」部分,我們提出了 s=f(x)

          s=f(x),x

          x 是用戶滑動(dòng)距離,s

          s 是頁(yè)面滑動(dòng)距離。我們把 s

          s 擴(kuò)展一下,變成「頁(yè)面翻轉(zhuǎn)角度」或「頁(yè)面縮放比率」,就可以支持其他的效果了。

          事實(shí)上,我們?cè)诨瑒?dòng)的時(shí)候,本身就是使用 css3 的 transform 屬性,將其中的 translate, rotate, scale 適當(dāng)?shù)慕M合就能做出千變?nèi)f化的翻頁(yè)效果了。

          更令人愉悅的動(dòng)畫(huà)

          這里指的是 animation-timing-function,拿最簡(jiǎn)單的滑動(dòng)效果舉例。如果是線性的函數(shù),用戶滑動(dòng)的速度始終等于頁(yè)面滑動(dòng)速度。而「感覺(jué)上」更流暢、更靈敏的應(yīng)該是:剛開(kāi)始頁(yè)面滑動(dòng)速度大于用戶滑動(dòng)速度,隨著翻頁(yè)的進(jìn)行,兩者趨于相同,過(guò)了某個(gè)點(diǎn)后,單位時(shí)間內(nèi),頁(yè)面滑動(dòng)速度開(kāi)始逐漸小于用戶滑動(dòng)速度,將速度表示為距離,就可以得到 x

          x 和 s

          s 之間的關(guān)系如下圖:

          x

          x 和 s

          s 的關(guān)系圖(橫軸為 x

          x,縱軸為 s

          s)

          在這里,不得不再提起兩種動(dòng)畫(huà)方案: js 動(dòng)畫(huà)和 css 動(dòng)畫(huà)。

          js 動(dòng)畫(huà)方案的一個(gè)優(yōu)點(diǎn)是,可以精確控制動(dòng)畫(huà)的進(jìn)程,而 css 無(wú)法做到。比如用戶在 x = 0.8 的時(shí)候手指離開(kāi)屏幕,因?yàn)椴捎玫耐粋€(gè) render,js 可以知道手指離開(kāi)屏幕的瞬間 x 處于 0.8 的位置,接下來(lái)的動(dòng)畫(huà)由 requestAnimationFrame 完成,整個(gè)過(guò)程流暢且完整。

          而 css 動(dòng)畫(huà)則不同,css 動(dòng)畫(huà)只有在動(dòng)畫(huà)開(kāi)始之前設(shè)定 animation-timing-function,當(dāng)用戶在 x = 0.8 手指離開(kāi)屏幕時(shí),原本的 js 控制滑動(dòng)過(guò)程中斷,由 css 來(lái)完成剩余的動(dòng)畫(huà),css 無(wú)法根據(jù)手指離開(kāi)屏幕的瞬間動(dòng)態(tài)計(jì)算 animation-timing-function ,所以在銜接的那個(gè)點(diǎn),兩者速度不匹配,會(huì)影響整體動(dòng)畫(huà)效果。

          但遺憾的是,js 的動(dòng)畫(huà)方案有性能問(wèn)題,我們?cè)谟脩羰种鸽x開(kāi)屏幕后的那一部分只能采取 css 動(dòng)畫(huà)方案。這個(gè)「更令人愉悅的動(dòng)畫(huà)」也只能用在手指滑動(dòng)期間。

          總結(jié)和展望

          本文講述了一個(gè)「絲般順滑」的 H5 翻頁(yè)庫(kù)的開(kāi)發(fā)過(guò)程中遇到的一些問(wèn)題和對(duì)應(yīng)的解決方法?;镜幕瑒?dòng)翻頁(yè)模型建立之后,重點(diǎn)關(guān)注了性能的問(wèn)題,分為手指離開(kāi)屏幕前手指離開(kāi)屏幕后兩個(gè)階段。前一階段主要聚焦于減少 DOM 操作。后一階段聚焦于動(dòng)畫(huà)的性能,并且對(duì)比了 js 動(dòng)畫(huà)和 css 動(dòng)畫(huà)的性能數(shù)據(jù),最后得出了在手指離開(kāi)屏幕后使用 css 動(dòng)畫(huà)的結(jié)論。此外,我們還基于「數(shù)據(jù)驅(qū)動(dòng)」的思想,在翻頁(yè)效果動(dòng)畫(huà)函數(shù)兩部分進(jìn)行了擴(kuò)展,增強(qiáng)了翻頁(yè)庫(kù)的功能,也豐富了 H5 的展現(xiàn)效果。

          本文中嘗試用「數(shù)據(jù)驅(qū)動(dòng)」的思想去解釋整個(gè)過(guò)程,但是因?yàn)樾阅軉?wèn)題只能暫時(shí)放棄,希望在未來(lái)能找到更好的方案。由于水平所限,文中難免會(huì)出現(xiàn)紕漏,歡迎大家批評(píng)指正,共同學(xué)習(xí)進(jìn)步。感謝 Swiper 和 islider 翻頁(yè)庫(kù)的啟發(fā),特別感謝和 @Ronny 的熱烈討論。

          本文所述的 swiper 庫(kù)地址:https://github.com/fex-team/swiper。master 分支所用的代碼是目前百度 H5 線上使用的。raf 分支是文中提到的使用 js 動(dòng)畫(huà)方案。

          希望本文能幫助到您!

          點(diǎn)贊+轉(zhuǎn)發(fā),讓更多的人也能看到這篇內(nèi)容(收藏不點(diǎn)贊,都是耍流氓-_-)

          關(guān)注 {我},享受文章首發(fā)體驗(yàn)!

          每周重點(diǎn)攻克一個(gè)前端技術(shù)難點(diǎn)。更多精彩前端內(nèi)容私信 我 回復(fù)“教程”

          原文鏈接:http://fex.baidu.com/blog/2017/10/build-a-silky-smooth-slide-library/

          作者:zhangbobell


          主站蜘蛛池模板: 蜜桃视频一区二区三区| 蜜桃视频一区二区| 一区二区三区在线免费观看视频| 国产内射999视频一区| 精品无码中出一区二区| 人妖在线精品一区二区三区| 中文字幕Av一区乱码| 一区在线免费观看| 精品国产一区二区三区久久狼| 久久精品免费一区二区| 精品一区二区三区无码免费视频| 制服丝袜一区二区三区| 熟妇人妻系列av无码一区二区| 视频在线一区二区| 免费观看日本污污ww网站一区| 国产麻豆精品一区二区三区| 91精品国产一区二区三区左线| 中文字幕一区二区人妻性色| 国产精品自在拍一区二区不卡| 日韩社区一区二区三区| 国产福利电影一区二区三区,日韩伦理电影在线福 | 亚洲乱码国产一区三区| 亚洲av片一区二区三区| 麻豆一区二区三区蜜桃免费| 一区二区三区杨幂在线观看| 激情爆乳一区二区三区| 无码人妻一区二区三区在线水卜樱 | 日本精品一区二区三区在线视频一 | 国产日韩视频一区| 日本精品视频一区二区| 国产视频一区在线播放| 亚洲av午夜精品一区二区三区| 波多野结衣中文一区二区免费| 亚洲高清偷拍一区二区三区| 国产精品亚洲高清一区二区| 亚洲国产精品一区二区第一页| 久久无码人妻一区二区三区午夜| 亚洲美女一区二区三区| 中文字幕人妻AV一区二区| eeuss鲁片一区二区三区| 日韩一区二区免费视频|