簡體   English   中英

ReactJS Touch事件和iOS Safari

[英]ReactJS Touch Events and iOS Safari

我正在嘗試構建一個可滑動輪播的react組件。 這是針對移動設備的,因此觸摸是必須的。 這是我當前的設置:

  1. 一個新的React類,其對象充滿共享變量,如下所示:

     var pmilla = React.createClass({ ppSlick: { touchStartVal: '', prevTouchVal: '', matrix: '', initSliderLeft: '', threshHold: 75, // number of pixels we need to travel before moving to next slide timestamp: '', slideTrack: '', // should be a jquery object viewPortWidth: '', offSets: '', disFromStart: '', isSwiping: false, currentSubPage: '', animType: '', transformType:'', transitionType:'', }, 
  2. Touchstart處理程序:

     touchStartHandler: function(e){ this.ppSlick.touchStartVal = e.nativeEvent.touches[0]; this.ppSlick.prevTouchVal = e.nativeEvent.touches[0]; this.ppSlick.matrix = this.transMatrixToArray(this.ppSlick.slideTrack.css(this.ppSlick.transformType)); this.ppSlick.initSliderLeft = parseInt(this.ppSlick.matrix[4] , 10); }, 
  3. Touchmove處理程序(這就是問題所在):

     touchMoveHandler: function(e){ var touch = e.nativeEvent.touches[0]; this.ppSlick.disFromStart = e.nativeEvent.touches[0].pageX - this.ppSlick.touchStartVal.pageX; var dis = Number(e.nativeEvent.touches[0].pageX - this.ppSlick.prevTouchVal.pageX); console.log('from pp obj', this.ppSlick.prevStartVal); console.log('inside touchandler', touch); 

到現在為止還挺好。 在此屏幕截圖中可以看到,一切在桌面瀏覽器上都運行良好。 (這是兩個控制台日志的輸出;兩個pageX值之間的差異是我用來處理轉換的內容)

OS X Chrome

因此,所有這些工作到現在為止。 現在看看在iOS Safari上會發生什么:

iOS 8 Safari

他們是一樣的。 我嘗試使用不同的觸摸事件(nativeEvent與Synthetic),嘗試將touchStartValprevTouchVal變量放置在其他位置,但似乎無濟於事。 我對此一無所知。 讓我知道是否需要提供更多信息。

謝謝!

可能是iOS的Safari瀏覽器錯誤。

嘗試:

cursor: pointer;

更多信息:

http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html

解決方案是不要對共享變量使用某些任意對象,而要使用setState()。 我不能完全確定React在做什么,但是看起來我定義的全局對象一直被覆蓋。 使用組件狀態有效。

奇怪的是,先前的實現(對象)在桌面瀏覽器上可以運行,但在iOS Safari上無法運行。 仍然不確定為什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM