整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          淺談移動設備交互體驗之慣性滾動

          久以前,手機上的交互依賴鍵盤和觸控筆。我們要查看一個很長很長的列表,必須使用非常難用的觸控筆或鍵盤的上下左右鍵。后來黑莓發明了滾動球,緩解了大拇指按出繭的問題。

          2007年,蘋果推出iPhone。iPhone只有一個玻璃屏,沒有觸控筆,直接用手指操作,支持多手指。Multi-Touch這項技術在推出時被譽為和Mouse(Mac),Click wheel(iPod)一樣革命性的發明。當然最近的3D Touch(Apple watch)也是革命性的。在推出iPhone之前,蘋果已經做了多年的鋪墊。2005年收購的小公司finger works就是專門做手勢識別的團隊,用macbook的人幾乎是脫離鼠標的,因為其觸控板非常好用,所用技術來自這家公司。

          當時有很多程序猿和產品經理討論這個技術如何實現。瘋狂的Web開發者要在瀏覽器上實現基于鼠標中鍵的滾動效果:當很快地滾動中鍵并停止時,頁面由于慣性,會繼續往下滾動一段距離才停止。有一個專業名詞用來描述,叫Momentum Scrolling。還有人用Web寫了示例,用來模擬手指和屏幕交互過程中的數學邏輯,iScroll 和 Scrollability 都是不錯的作品。頭條的Web圖集也有使用Javascript(以下簡稱JS)實現的慣性滾動代碼。下面我們用最簡單的Scrollability來講解,如何實現慣性滾動。

          一. 實現滾動

          HTML代碼:
          JS代碼:



          頁面中有四個元素,頂部的黑條,底部的黑條,黑條中的窗口A,以及窗口內一堆英文名列表B(可以想象成辦公室的卷簾)。坐標系從窗口A左上角開始,橫軸X(右邊為正向),縱軸Y(下邊為正向)。注意,這里Y軸的方向和數學課本里相反。手指在窗口A上移動,往下移動一段距離,得到的 distanceY > 0。代碼由HTML,CSS和JS構成,HTML定義了兩個黑條,窗口A和卷簾B。CSS定義了他們的顏色,位置等屬性。Javascript則是重點要講的,它用來控制手指和屏幕的交互。JS中定義了幾個功能和變量,其中kBounceLimit這樣以k開頭的,是數學公式中的固定不變的參數。startX,startY,touchX,touchY用來記錄手指位置,touchAnimator是負責操作卷簾B滾動的對象。

          這幾行代碼表示,當用戶手指觸碰到屏幕時,會執行onTouchStart,去做一些事情。手指在屏幕上移來移去時,會執行onTouchMove。手指離開屏幕的瞬間,硬件會通知程序手指離開,此時執行onTouchEnd。touchstart和touchend都是瞬間事件,從手指按下,移動,抬起的一套過程中只會被通知一次,touchmove是連續觸發的,移動1厘米,會收到幾十個通知,告訴程序當前手指坐標x,y,時間點。

          讓卷簾隨著手指移動的辦法是,在touchstart時,記錄手指位置y1;touchmove時根據得到y2,算出當前移動的距離distance=y2-y1,將卷簾在y軸上移動distance距離; touchmove不斷觸發,不斷執行前面兩步,把上一次的touchmove當作起始點,緊接著觸發的touchmove當作后來的點,計算distance移動卷簾。

          iPhone在處理滾動的過程中,當頁面已經到最頂部時,再往下拉會有彈簧效果:手指拉了一個屏幕的距離,內容只移動了半屏。用這樣的代碼實現其效果:

          velocity的含義是:手指在屏幕移動一段距離,觸發n個touchmove事件,相鄰兩個事件的y坐標之差就是velocity(速度)。

          打個比方,老李跑步,他的步長就是 velocity。當老李還沒跑,想逃出森林公園南門時會有人把他往回拉。Velocity是1米,往回拉的彈性會給velocity打折,身體移動距離可能是0.8米,具體的折扣為:

          (1.0 - (position - max) / bounceLimit)*kBounceLimit

          position:當前卷簾移動到的位置,(逃出南門的距離)

          parentOffsetHeight : 598 窗口A的高度

          nodeOffsetHeight : 4602 卷簾B的長度

          max:0

          min:-4004 (parentOffsetHeight-nodeOffsetHeight,卷簾被擋住的長度,從下往上拉卷簾,最多移動的距離就是min值)

          absMin = min

          absMax = max

          bounceLimit :窗口高度 parentOffsetHeight*kBounceLimit

          kBounceLimit:0.75

          轉換后,速度velocity衰減的系數為 0.75 - position/ 598,當position越大,velocity打折越多,越難往下拖動。

          二. 慣性和回彈

          接著,我們用代碼實現自由滾動和下拉時的回彈

          在touchend時,加入takeoff()方法





          takeoff方法中,根據手指離開屏幕時的velocity計算后面滾動動畫的代碼:




          savekeyframe方法會保存計算出來的每一幀動畫,包含位置和時間點。

          1. 自由滾動時的狀態:




          2. 在頂部回彈時的狀態:






            position = easeOutExpo(decelStep, decelOrigin, decelDelta, kBounceTime);
            continues = ++decelStep <= kBounceTime && Math.floor(Math.abs(position)) > max;

            迭代計算position的公式為緩動曲線easeOut,接受的四個參數為:
            decelStep :初始值為0,每次減速,自增1
            decelOrigin :decelStep為0時 position值
            decelDelta :decelStep為0時 max-position
            kBounceTime :240
            對比linear,ease-in,ease-out和ease-in-out四個曲線,ease-out方程x=easeOut(t)在一開始有平緩的加速,在時間t到50%時,位置x已經快到達70%,
            在后續50%的時間內減速直到停止。符合我們平時看到的iOS滾動邏輯。






            function easeOutExpo(t, b, c, d) { return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b }
            continues的計算

            自由滾動時:continues = Math.floor(Math.abs(velocity)*10) > 0; // Math.abs(velocity) < 0.1

            頂部回彈時:continues = ++decelStep <= kBounceTime && Math.floor(Math.abs(position)) > max; // decelStep<=240加位置約束

            底部回彈時:continues = ++decelStep <= kBounceTime && Math.ceil(position) < min; //同上

          3. 底部上拉的狀態,同上。

          4. saveKeyframe(!continues);
            time += kAnimationStep;

            作用是根據diff判斷是否保存這個關鍵幀,最后得到位置和時間的運動軌跡




          5. 根據keyframes得到運動軌跡,再使用實現滾動的代碼,讓頁面運動起來。這里就不展開說明了


            (gif圖略卡,實際效果流暢很多)


          三. 瀏覽器實現

          蘋果和谷歌在意識到這個需求后,為web開發者提供了原生的支持。

          之前需要用iscroll等框架的需求,Chrome瀏覽器只需 overflow:scroll 一行代碼即可。iOS設備需再加一行代碼 -webkit-overflow-scrolling: touch;

          原生實現的好處是

          1. 計算位置的過程要進行大量小數運算,這一點JS非常慢。

          2. 慣性滾動是蘋果專利,原理涉及數學物理知識很多,遠比web開發者模仿出來的要復雜,而且不開源。

          3. 如果滾動的內容非常長(手機通訊錄,微信朋友圈等),要做延遲渲染,生成瓦片,貼圖,銷毀或者回收,內存管理,這些工作必須由系統支持,而不是業務支持。

          4. iOS支持Scroll Snapping with CSS Snap Points(點擊訪問),在滾動結束時對齊到內部元素,只需要兩行css代碼。

          隨著手機硬件的發展,瀏覽器和操作系統在圖形渲染,網絡API,數據存儲等方面的差距越來越小。而且瀏覽器面向業務,對底層架構的抽象更好,一行css,一個javascript對象可以替代幾千行java代碼(or 幾百行swift代碼?)。很多只在操作系統中提供的功能,例如消息推送,也已經在瀏覽器實現。

          Web的開放性讓很多公司都對其添磚加瓦。你很難想象微軟會往Android倉庫中貢獻代碼,或者谷歌給IE瀏覽器解決bug,但他們確實都在為HTML5標準做貢獻。另一個例子是Adobe,他們希望將Photoshop中的濾鏡,圖層混合模式等功能提供給web開發者,于是提議做了css filter,css blender。

          http://sarasoueidan.com/demos/css-blender/



          還有很多簡單好玩的東西,以后會在博客中慢慢寫。如有描述錯誤和不當,請批評指正。

          作者:王偉

          動web滾動問題

          在移動端如果使用局部滾動,意思就是我們的滾動在一個固定寬高的div內觸發,將該div設置成overflow:scroll/auto;來形成div內部的滾動,這時我們監聽div的onscroll發現觸發的時機區分android和ios兩種情況,具體可以看下面表格:

          不能實時觸發表現:只在手指觸摸的屏幕上一直滑動時和滾動停止的那一刻才觸發。

          關于模擬滾動

          概念

          正常的滾動:我們平時使用的scroll,包括上面講的滾動都屬于正常滾動,利用瀏覽器自身提供的滾動條來實現滾動,底層是由瀏覽器內核控制。

          模擬滾動:最典型的例子就是iscroll了,原理一般有兩種:

          • 監聽滾動元素的touchmove事件,當事件觸發時修改元素的transform屬性來實現元素的位移,讓手指離開時觸發touchend事件,然后采用requestanimationframe來在一個線型函數下不斷的修改元素的transform來實現手指離開時的一段慣性滾動距離。
          • 監聽滾動元素的touchmove事件,當事件觸發時修改元素的transform屬性來實現元素的位移,讓手指離開時觸發touchend事件,然后給元素一個css的animation,并設置好duration和function來實現手指離開時的一段慣性距離。

          方案比較

          第一種方案由于慣性滾動的時機時由js自己控制所以可以拿到滾動觸發階段的scrolltop值,并且滾動的回調函數onscroll在滾動的階段都會觸發。第二種方案相比第一種要劣勢一些,區別在于手指離開時,采用的時css的animation來實現慣性滾動,所以無法直接觸發慣性滾動過程中的onscroll事件,只有在animation結束時才可以借助animationend來獲取到事件,當然也有一種方法可以實時獲取滾動事件,也是借助于requestanimationframe來不斷的去讀取滾動元素的transform來拿到scrolltop同時觸發onscroll回調。

          正常滾動和模擬滾動的性能比較

          模擬滾動的fps值波動較大,這樣滾動起來會有明顯的卡頓感覺,各位體驗的時候如果滾動超過10屏之后就可以明顯感覺到兩著的區別。

          在使用模擬滾動時,瀏覽器在js層面會消耗更多的性能去改變dom元素的位置,在dom復雜層級深的頁面更為高,所以在長列表滾動時還要使用正常滾動更好。

          滾動和下拉刷新

          方案1:借助iscroll的原理,整個頁面使用模擬滾動,將下拉刷新元素放在頂部,當頁面滾動到頂部下拉時,下拉刷新元素隨著頁面的滾動出現,當手指離開時收回,此方案實現起來較為簡單直接借助iscoll即可,但是使用了模擬滾動之后在正常的列表滾動時性能上不如正常滾動。

          方案2:頁面使用正常滾動,將下拉刷新元素放置在頂部top值為負值(正常情況下不可見),當頁面處于頂部時下拉,這時監聽touchmove事件,修改scrollcontent的tranlateY值,同時修改下拉刷新元素的tranlateY值,將兩者同時位移來將下拉刷新元素顯示出來,手指離開時(touchend)收回,這種方案滿足了在正常列表滾動時使用原生的滾動節省性能,只在下拉刷新時使用模擬滾動來實現效果。

          方案3:方案2的改良版,唯一不同是將下拉刷新元素和scrollcontent放在一個div里,將下拉刷新元素的margintop設為負值,在下拉刷新時,只需要修改scrollcontent一個元素的tranlateY值即可實現下拉,在性能上要比方案2好。

          還會有一個性能上的問題就是:當頁面的列表過長,dom元素過多時,在模擬滾動,下拉刷新這段時間內,頁面也會有卡頓現象,這里采取了一個優化策略即:

          • 列表較長時dom數量較多時,在觸發下拉刷新的時機時將頁面視窗之外的dom元素隱藏或者存放在fragment里面。
          • 在刷新完成之后手指離開(touchend)時將隱藏的元素顯示出來。
          • 需要注意的是,隱藏和顯示視窗外的元素這個操作在下拉刷新時只會執行一次,并且只有在下拉刷新時才會執行。

          下面介紹如何去優化scroll事件的觸發,避免scroll事件過度消耗資源:

          防抖(Debouncing)和節流(Throttling)

          scroll 事件本身會觸發頁面的重新渲染,同時 scroll 事件的 handler 又會被高頻度的觸發, 因此事件的 handler 內部不應該有復雜操作,例如 DOM 操作就不應該放在事件處理中。

          特別是針對此類高頻度觸發事件問題(例如頁面 scroll ,屏幕 resize,監聽用戶輸入等)。

          防抖(Debouncing)

          防抖技術即是可以把多個順序地調用合并成一次,也就是在一定時間內,規定事件被觸發的次數。

          節流(Throttling)

          防抖函數確實不錯,但是也存在問題,譬如圖片的懶加載,我希望在下滑過程中圖片不斷的被加載出來,而不是只有當我停止下滑時候,圖片才被加載出來。又或者下滑時候的數據的 ajax 請求加載也是同理。這個時候,我們希望即使頁面在不斷被滾動,但是滾動 handler 也可以以一定的頻率被觸發(譬如 250ms 觸發一次),這類場景,就要用到另一種技巧,稱為節流函數(throttling)。

          節流函數,只允許一個函數在 X 毫秒內執行一次。

          與防抖相比,節流函數最主要的不同在于它保證在 X 毫秒內至少執行一次我們希望觸發的事件 handler。

          關于防抖動與節流,我的博客文章也有提及。

          使用rAF(requestAnimationFrame)觸發滾動事件

          如果頁面只需要兼容高版本瀏覽器或應用在移動端,又或者頁面需要追求高精度的效果,那么可以使用瀏覽器的原生方法 rAF(requestAnimationFrame)。

          window.requestAnimationFrame() 這個方法是用來在頁面重繪之前,通知瀏覽器調用一個指定的函數。這個方法接受一個函數為參,該函數會在重繪前調用。

          rAF 常用于 web 動畫的制作,用于準確控制頁面的幀刷新渲染,讓動畫效果更加流暢,當然它的作用不僅僅局限于動畫制作,我們可以利用它的特性將它視為一個定時器。(當然它不是定時器)

          通常來說,rAF 被調用的頻率是每秒 60 次,也就是 1000/60 ,觸發頻率大概是 16.7ms 。(當執行復雜操作時,當它發現無法維持 60fps 的頻率時,它會把頻率降低到 30fps 來保持幀數的穩定。)

          var ticking = false; // rAF 觸發鎖
           
          function onScroll(){
           if(!ticking) {
           requestAnimationFrame(realFunc);
           ticking = true;
           }
          }
           
          function realFunc(){
          	// do something...
          	console.log("Success");
          	ticking = false;
          }
          // 滾動事件監聽
          window.addEventListener('scroll', onScroll, false);
          

          實現以16.7ms 觸發一次 handler,降低了可控性,但是提升了性能和精確度。

          從本質上而言,我們應該盡量去精簡 scroll 事件的 handler ,將一些變量的初始化、不依賴于滾動位置變化的計算等都應當在 scroll 事件外提前就緒。

          避免在scroll 事件中修改樣式屬性 / 將樣式操作從 scroll 事件中剝離



          輸入事件處理函數,比如 scroll / touch 事件的處理,都會在 requestAnimationFrame 之前被調用執行。

          因此,如果你在 scroll 事件的處理函數中做了修改樣式屬性的操作,那么這些操作會被瀏覽器暫存起來。然后在調用 requestAnimationFrame 的時候,如果你在一開始做了讀取樣式屬性的操作,那么這將會導致觸發瀏覽器的強制同步布局。

          滑動過程中嘗試使用 pointer-events: none 禁止鼠標事件

          pointer-events 是一個 CSS 屬性,可以有多個不同的值,大概的意思就是禁止鼠標行為,應用了該屬性后,譬如鼠標點擊,hover 等功能都將失效,即是元素不會成為鼠標事件的 target。

          pointer-events: none 可用來提高滾動時的幀頻。的確,當滾動時,鼠標懸停在某些元素上,則觸發其上的 hover 效果,然而這些影響通常不被用戶注意,并多半導致滾動出現問題。對 body 元素應用 pointer-events: none ,禁用了包括 hover 在內的鼠標事件,從而提高滾動性能。

          大概的做法就是在頁面滾動的時候, 給 添加上 .disable-hover 樣式,那么在滾動停止之前, 所有鼠標事件都將被禁止。當滾動結束之后,再移除該屬性。

          文經授權轉載自微信公眾號「新原理研究所」(ID:newprincipia)

          在物理學中,存在著許多令人驚奇的效應,有的就發生在日常生活中,有的則發生在遙遠的深空,有的在多年之后終于被驗證,有的則依然停留在理論層面。下面,我們將從最熟悉的效應開始,一直暢游到宇宙深處……

          多普勒效應

          無論是在地球上,還是在整個宇宙中,多普勒效應無處不在。一輛正在鳴笛駛來的汽車,從它向我們靠近到離我們遠去,鳴笛的音調會發生變化,這是生活中最常見的多普勒效應。

          更具體的說,當聲源(或光源)相對于觀測者移動時,觀測者所接收到聲波(或光波)的頻率會發生變化。當源朝著接收方移動時,源的波長會變短,頻率變高;如果源的移動方向是離接收方遠去,那么波長會變長,頻率降低。

          多普勒效應在天體物理學中的應用更為顯著,天文學家可以根據“紅移”和“藍移”來判斷一個天體是在離我們遠去還是向我們靠近。不同光波的頻率對應不同的顏色,向我們靠近的天體,光波會向藍光偏移,而遠離我們的天體光波會向紅光偏移。從探測恒星或星系靠近或遠離我們的速度,到發現系外行星的存在,多普勒效應都扮演著重要的角色。

          蝴蝶效應

          一只在亞馬遜河流域的蝴蝶揮動翅膀,引發了美國得克薩斯州的異常龍卷風……這個耳熟能詳的故事,實際上描述的是在一個復雜系統的狀態上出現的微小變化,可以在不久之后導致劇烈的變化。這樣一種現象被稱為蝴蝶效應。

          當氣象學家羅倫茲(Edward Lorenz)在談到蝴蝶效應時,他實際上想要表達的是“混沌”這一概念。在混沌系統中,一個微小的調整就可能產生一系列的連鎖效應,從而徹底地改變最終結果。

          關于混沌的最令人驚訝的事情之一,可能就是物理學家用了很長時間才意識到它的普遍性,而這種歷史性的空白之所以存在,部分原因在于混沌系統很難分析。對于某些非線性系統來說,哪怕我們能以任意精度測量出最微小的擾動,也只能對其在有限時間內作出預測。

          這種混沌效應幾乎出現在各種物理系統中。比如從量子水平上看,黑洞也會表現出類似的混沌行為。對于黑洞來說,哪怕是出現將一個粒子扔進這個深淵這樣的微小改變,也可能徹底改變黑洞的行為方式。

          邁斯納效應

          當一種材料從一般狀態相變至超導態時,會對磁場產生排斥現象,這種現象被稱為邁斯納效應。1933年,邁斯納(Walther Meissner)和他的博士后奧切森菲爾德(Robert Ochsenfeld)在對被冷卻到超導態的錫和鉛進行磁場分布測量時發現了這種效應(因此它也被稱為邁斯納-奧切森菲爾德效應)。當把超導材料放入磁場中時,超導體內部的磁通量會被即刻“清空”。這是因為磁場會使得超導體表面出現超導電流,該超導電流又反過來在超導體內產生與外磁場大小相等、方向相反的磁場,兩個磁場相互抵消,使超導體內形成恒定為零的磁感應強度。因此從外部看起來,就像是超導體排空了體內的磁感線一樣。

          當把超導材料放在磁鐵上時,只要這個磁體的磁場強度不超過特定極限,超導體便可以懸浮在磁體上方。這是因為邁斯納效應讓磁場發生畸變,產生了一個向上的力。

          如果磁場的強度持續增加,超導體就會失去超導性,這類具有邁斯納效應的超導體被稱為I型超導體,它們都是金屬超導體。還有一些超導體不具有或者只擁有部分邁斯納效應,它們被稱為II型超導體,通常是各種由非金屬和金屬構成的合金材料,這類超導體在強磁場下也能維持超導性能。

          阿哈羅諾夫—玻姆效應

          這是物理學中一個不太為人所知卻意義重大的效應。

          在經典電磁學中,只有在粒子直接與電磁場接觸了的情況下,粒子才會受到場的影響。但在1959年,阿哈羅諾夫)Yakir Aharonov)和玻姆(David Bohm)兩位理論物理學家提出,量子粒子就算從未直接與一個電場或磁場接觸,也能受到這個電場或磁場的影響。在提出之后,這一觀點遭到了廣泛的質疑。經典電磁學中的電場和磁場是負責所有物理效應的基本實體,電磁場可以用一個被稱為電磁勢的量來表示,這個量在空間的任何地方都有一個值。從電磁勢可以輕易地推導出電磁場。但電磁勢的概念曾一直被認為只是一個純粹的數學概念,不具有任何物理意義。

          然而1959年,阿哈羅諾夫和玻姆提出了一個“思想實驗”,將電磁勢與可測量的結果聯系了起來。在這個思想實驗中,一束電子被分成兩條路徑,分別繞著一個圓柱形電磁鐵(或螺線圈)的兩側運動,磁場集中在線圈內部,而且磁場大小可以被調節的極弱。因此這兩條電子路徑可以穿過一個基本沒有場存在的區域,但這個沒有場的區域的電磁勢并不為零。

          阿哈羅諾夫和玻姆從理論上論證了這兩條不同路徑上的電子會經歷不同的相位變化,當這兩條路徑上的電子再重新結合時,可以產生可被檢測到的干涉效應。阿哈羅諾夫-玻姆效應描述的就是量子粒子會受到的這種可被測量的經典電磁勢的影響,表明電磁勢不僅僅是一種數學輔助,而是真實的物理存在。

          現在,物理學家已經通過一系列實驗觀測到了阿哈羅諾夫-玻姆效應。

          網球拍效應

          網球拍效應描述的是當把一個網球拍的一面朝上,旋轉著將它拋向空中,接著球拍會繞著一個軸旋轉的情況。當讓球拍繞著橫軸旋轉時,會出現一種令人驚訝的效應:球拍除了會繞著橫軸進行360度的旋轉之外,幾乎總是會出人意料地繞縱軸進行180度的翻轉。

          這種效應是由在拋擲過程中產生的微小偏差和擾動,以及三維剛體在三個不同的慣性矩下運動造成的。如果一個剛性物體有三個旋轉軸“1”、“2”、“3”,也就是說它擁有三種不同的旋轉方式,其中軸1的長度最短,軸3的長度最長,那么物體繞著軸1和軸3的旋轉最穩定,而繞著中間軸軸2則不穩定。這種奇怪的效應是經典力學的結果,我們可以通過歐拉方程計算出這種效應。

          視頻來源:Plasma Ben / Youtube

          在空中旋轉的網球拍是這個效應的一個典型例子,這個效應也因此得名。它也被稱為Dzhanibekov效應,以俄羅斯宇航員Vladimir Dzhanibekov的名字命名。1985年,Dzhanibekov在太空中發現了這個效應。

          這個效應適用于所有軸1小于軸2,軸2小于軸3的三維剛體,即便中間軸的長度與軸3可能非常接近,也會出現這種繞著最長和最短的軸旋轉穩定;而繞著中間軸的運動則會出現即使在最小的干擾下,也會引發的180度翻轉現象。

          光電效應

          當光照射在金屬表面時,它會將圍繞著原子核旋轉的電子“踢”出來,這便是著名的光電效應。但是要讓這一切發生,光的頻率必須高于某個閾值——這個值的大小取決于材料。如果頻率低于閾值,那么不論光的強度有多大,都無法將電子踢出。

          1905年,為了解釋光電效應,愛因斯坦(Albert Einstein)提出了光實際上是由量子——即光子構成的,而光子的能量正比于頻率。愛因斯坦也因提出光電效應而在1922年被授予諾貝爾物理學獎。

          光電效應非常重要,它不僅是光合作用的基礎,同時也是現代許多電子設備,如光電二極管、光導纖維、電信網絡、太陽能電池等等的理論基礎。

          霍爾效應

          1879年,年僅24歲的霍爾(Edwin Hall)發現了一個神奇的現象。他注意到,如果將一個有電流流過的金屬片放到磁場中,讓磁感線以垂直的角度穿過金屬片的表面,那么在既垂直于磁場又垂直于電流的方向上就會產生一個電勢差,這種現象便是霍爾效應。它之所以發生,是因為帶電粒子在磁場中會受到洛倫茲力的影響,使其運動方向發生偏轉。

          霍爾的實驗是在室溫下以及中等強度的磁場(小于1T)下進行的。到了20世紀70年代末,研究人員開始使用半導體材料,在低溫(接近絕對零度)和強磁場(約30T)的條件下,研究霍爾效應。在低溫半導體材料中,電子具有很強的流動性,但它們只能在一個二維平面中運動。這種幾何上的限制導致了許多意想不到的影響,其中一個就是改變了霍爾效應的特征,這種變化可以通過測量霍爾電阻隨磁場強度的變化而觀察到。

          1980年,德國物理學家馮&middot;克利青(Klaus von Klitzing)在類似的實驗條件下發現,霍爾電阻隨磁場強度的變化不是線性的,而是呈階梯式的。階梯出現的位置與材料屬性無關,而是與一些基本物理常數除以一個整數有關。這便是整數量子霍爾效應,是整個凝聚態物理領域最重要、最基本的量子效應之一。這一發現也為馮&middot;克利青在1985年贏得了諾貝爾物理學獎。

          在對量子霍爾效應的后續研究中,研究人員又驚喜地發現了霍爾電阻的一個新階梯,比馮&middot;克利青發現的最高電阻高三倍。隨后,研究人員發現了越來越多這樣的新階梯,所有新臺階的高度都能用以前的常數表示,但需要它們除以不同的分數。正是因為這個原因,新的發現被命名為分數量子霍爾效應。

          量子隧穿效應

          在日常生活中,如果我們把一顆大理石放入一個密封的盒子中,大理石顯然是不可能從盒子逃出來的。但當我們把大理石變成一個量子粒子,把盒子換成量子盒子時,粒子是由一定概率可以逃出來的,這個現象被稱為量子隧穿效應。

          這里我們所說的困住的粒子的量子盒子,實際上是指能量勢壘。量子隧穿之所以可能發生,是因為電子具有波的特性。量子力學為每一個粒子都賦予了波的特性,而且波穿透障礙的概率總是有限的。

          雖然這聽起來有悖于直覺,但確實真實存在的效應。你可能聽說過,太陽發出的光要經過8分鐘才抵達地球。然而,如果沒有量子隧穿效應,太陽永遠不會發出這些光子。在恒星中的這種氫聚變中,兩個質子都帶正電,會相互排斥。斥力會妨礙這兩個粒子在太陽核心中因過于靠近而發生聚變,然而量子隧穿卻讓這些粒子可以“穿過”屏障,讓聚變發生。

          卡西米爾效應

          這是一個表明“真空”不“空”的效應。

          我們都知道,一個帶正電和一個帶負電的金屬板如果靠得很近,那么它們之間就會存在相互吸引的力。但如果這兩塊金屬板不帶電呢?物理學家發現,在真空中它們也會相互吸引。這就是卡西米爾效應。

          1948年,卡西米爾(Hendrik Casimir)預言真空中兩個不帶電荷的金屬板會因為電磁場的量子漲落的影響而受到吸引力,力的大小隨金屬板距離的四次方成反比。之所以有這種力存在,是因為金屬板之間充滿了包含能量的電磁波,當它們相互靠近時,真空中的一些波會逐漸被擠壓出去,使得周圍空間的能量高于金屬板之間的能量,推動它們繼續靠近,從而表現得像是存在一種吸引力。

          卡西米爾效應預言的吸引力非常微弱,以至于大部分情況下都可以忽略不計。直到1997年,物理學家們才有足夠精確的手段能直接證實卡西米爾效應的存在。

          在卡西米爾效應被提出不久就有物理學家開始思考是否可以逆轉卡西米爾效應——將吸引力轉化成排斥力。2010年有科學家提出應該存在能讓吸引力和排斥力相互抵消的方法,從而在兩個表面之間建立一種平衡態。2019年,加州大學伯克利分校的張翔教授和他的團隊做到了這一點。

          霍金效應

          黑洞,是宇宙中最神秘的天體,它的引力是如此之強,以至于任何東西一旦進入了它的視界就再也無法逃脫。近年來,科學家不僅探測到了黑洞合并輻射出的引力波,也“拍”下了黑洞的第一張圖像。

          在20世紀70年代初,霍金(Stephen Hawking)發現了黑洞最奇妙的效應。他證明了黑洞是具有溫度的,并指出黑洞釋放的熱輻射的溫度與黑洞的質量成反比。這是他最著名的科學成就:霍金輻射。

          根據量子場論,所謂的真空并不是完全空的,而是充滿了量子漲落——虛粒子對會不斷的冒出又湮滅。當這些虛粒子對出現在黑洞的事件視界附近時,虛粒子對中的其中一個會被黑洞捕獲,另一個則會逃逸。落入黑洞的粒子必須擁有負能量,這樣才能保持總能量不變。而對于外部的觀測者而言,黑洞剛剛發射了一個粒子。

          然而,想要試圖測量這種效應是一件非常難的事情,因為霍金輻射非常微弱,很容易被滲透在整個宇宙中的宇宙微波背景輻完全抹去。

          文:二宗主

          圖:岳岳

          參考來源:

          [1] http://backreaction.blogspot.com/2020/02/the-10-most-important-physics-effects.html

          [2] https://www.sciencenews.org/article/douglas-stanford-sn-10-scientists-watch

          [3] https://www.ias.edu/ideas/2017/stanford-black-holes-butterfly-effect

          [4] https://www.nobelprize.org/nobel_prizes/physics/laureates/2003/popular.html

          [5] http://news.mit.edu/2019/aharonov-bohm-effect-physics-observed-0905

          [6] https://physics.aps.org/story/v28/st4

          [7] https://phys.org/news/2017-07-quantum-world-tennis-racket.html

          [8] https://sciencedemonstrations.fas.harvard.edu/presentations/tennis-racquet-flip

          [9] https://www.nobelprize.org/prizes/physics/1921/einstein/facts/

          [10] https://www.nobelprize.org/prizes/physics/1998/press-release/

          [11] http://discovermagazine.com/2018/nov/your-daily-dose-of-quantum?es_ad=122882&es_sh=9c625adbb2227d8a9fe6f4c50d342594

          [12] https://archive.briankoberlein.com/2014/03/30/memory-hole/

          [13] https://journals.aps.org/prb/abstract/10.1103/PhysRevB.99.125403

          [14] https://www.nature.com/articles/d41586-019-03729-4

          [15] http://nautil.us/issue/69/patterns/how-to-get-close-to-a-black-hole

          原題目:十大物理學效應

          來源:新原理研究所

          編輯:米老貓


          主站蜘蛛池模板: 国产精品揄拍一区二区久久| 国产一区二区三区小向美奈子| 国产韩国精品一区二区三区久久| 不卡一区二区在线| 国产精品亚洲午夜一区二区三区 | 国产乱人伦精品一区二区 | 中文字幕在线观看一区| 性色AV一区二区三区| 日韩一区二区在线观看| 精品深夜AV无码一区二区老年 | 精品女同一区二区三区在线 | 久久精品综合一区二区三区| 蜜桃传媒一区二区亚洲AV| 久久精品一区二区国产| 国模精品一区二区三区| 国产精品一区二区三区免费| 日韩精品福利视频一区二区三区| 中文乱码精品一区二区三区| 国产精品亚洲高清一区二区| 亚洲国产精品一区二区第一页免 | 午夜精品一区二区三区免费视频| 亚洲一区二区三区在线播放| 午夜AV内射一区二区三区红桃视| 国产成人无码一区二区在线观看 | 国产在线精品一区二区高清不卡| 精品人妻一区二区三区四区在线 | 精品国产AⅤ一区二区三区4区 | 国产成人精品无人区一区| 美女福利视频一区二区| 乱人伦一区二区三区| 波多野结衣中文字幕一区| 在线一区二区观看| 国产精品99精品一区二区三区| 亚洲一区二区三区高清在线观看 | 欧美人妻一区黄a片| 无码人妻一区二区三区在线水卜樱 | 内射女校花一区二区三区| av无码人妻一区二区三区牛牛| 亚洲国产成人久久一区久久| 一区二区三区影院| 国产一区二区三区乱码在线观看|