模糊搜索中遇到的坑

項目中遇到的問題

  1. 拖拽性能問題

  2. 排序問題,在 Safari 中排序不生效

  3. Common.postRequest方法

  4. gesture手勢,pan,flick事件判定標(biāo)準(zhǔn)

  5. 傳遞過程中需要傳遞hybridid

  6. 事件傳遞的組織方式

問題的解決

拖拽性能問題

頁面中要通過拖動時間點來確定出行的時間段,在拖動時,發(fā)現(xiàn)第一次拖拽dot時有明顯的卡頓跳躍現(xiàn)象。查看chrome timeline工具,會發(fā)現(xiàn)有這樣的提醒。

于是推斷是因為在定位中使用position:absolute,通過改變left值來修改dot位置使得頁面不停的reflow導(dǎo)致頁面卡頓,于是將dot的定位方式修改為通過transform屬性來改變位置,這樣對頁面其他部分不會產(chǎn)生影響。修改后頁面中還是會有卡頓現(xiàn)象出現(xiàn),timeline中依然會提示上面的信息。應(yīng)該是因為在每次拖動改變時間段后對數(shù)據(jù)進(jìn)行篩選再重新渲染的緣故。但是改為transform方式還是對性能有一定的提升。

繼續(xù)查找卡頓的原因,發(fā)現(xiàn)只有在移動左側(cè)dot 時,會有明顯的跳躍現(xiàn)象。對left偏移值跟蹤處理發(fā)現(xiàn),在拖動時,left偏移值第一次變化大概會有20px左右,問題應(yīng)該出在這里。仔細(xì)回想代碼之后,發(fā)現(xiàn)是因為獲取拖拽距離時,使用的了pageX屬性。剛開始計算修改后的位置是計算pageX-gapLeft,由于不會計算拖拽開始時的位置,只是獲取鼠標(biāo)結(jié)束點的pageX再賦值給startDot,這樣就會出現(xiàn)拖動開始第一次20px的跳躍,因為拖動的位置更偏向中間,而不是dot 點的最左側(cè)。找到問題的原因后,使用clinetX判斷起止點的位移差,這個值就是手指拖動時移動端真實距離。再修改后,跳躍問題確實有了很大的改觀,但是仔細(xì)觀察的話還是能發(fā)現(xiàn)有卡頓現(xiàn)象,這個是由于事件判定的原因?qū)е碌?,后面會講。

排序問題

為了使篩選出符合條件的車站排在最前面,對篩選出的數(shù)據(jù)進(jìn)行了排序,但是只判斷是否符合時間條件,會出現(xiàn)其他數(shù)據(jù)一直閃動的現(xiàn)象,因此我選擇了對車次的出發(fā)時間進(jìn)行二次判斷,這樣在被篩選出的車站不發(fā)生改變的情況下,其他車站的位置也不會發(fā)生變化。使用Array.sort()方法,對數(shù)組排序,由于是否在范圍內(nèi)使用boolean值進(jìn)行判斷,因此我判定相等時就直接返回了true/false。在chrome中,排序生效,但是在Safari中,排序無效,查閱相關(guān)資料發(fā)現(xiàn),在Safari中,sort方法對boolean值類型的返回值無法進(jìn)行處理。隨后將返回值全部修改為正負(fù)值,成功解決了問題。

common.postRequest

由于后端接口是開放給客戶端的,因此在頁面中無法直接請求這種接口,必須要調(diào)用客戶端請求服務(wù)器的方法才能進(jìn)行,在QApp框架中,已經(jīng)定義好了Common.postRequest方法,可以直接調(diào)用客戶端中的插件。但是必須要在scheme鏈接中加上hybridid字段,必須是flight_bus_app/flight_ship_app才可以,否則無法調(diào)用客戶端的方法,可以在測試版的應(yīng)用上查看注冊的插件都有哪些。

手勢判定

判斷是否為拖拽行為時,會判斷持續(xù)時間有沒有超過300ms,如果沒有超過會判定為flick事件,因為pan事件開始的前300ms,事件并不會被觸發(fā),導(dǎo)致拖動后的第一次位置變化會有微小的跳躍,但是并不明顯,暫時沒有很簡便的解決方法,除非重寫一個新的手勢判定標(biāo)準(zhǔn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,694評論 4 61
  • 可能是幾天后的事了。 某種程度上來講,人心的執(zhí)念是件可怕的事,正如此時。不用問,當(dāng)然痛,只是早已經(jīng)過了會嚎嚎大叫的...
    小十七_(dá)閱讀 225評論 2 0
  • 作/林公子 以前的一篇舊文 \ 沒有推送出來過 你知道我最近開了紐約旅游的分享 備課講課升級 \ 寫東西的時間更少...
    i林公子閱讀 365評論 0 0

友情鏈接更多精彩內(nèi)容