《iPhone側滑不相容-mui》
前言:
公司專案APP即將投產,在搜尋引擎模擬iPhone和Android沒有問題,採用人工測試模擬正式投產使用時,發現iPhone不相容mui的側滑效果.準確來講,側滑欄可以出現,有兩個問題: 第一,mui的垂直滑動無效; 第二, mui的點選事件與swipper聯動效果無效.為解決此問題,開始瞭如下的探索,請聽小編娓娓道來:
正文:
一,站在巨人的肩膀上
公司中的其他專案也遇到過類似的問題,解決方案如下:
-
蘋果手機頁面不相容問題——mui: https://blog.csdn.net/tink_bell/article/details/82191746
這種方法解決不相容的思路是: 採用巢狀頁面的方式,替換掉mui的垂直滑動,偷樑換柱成iframe標籤自身的垂直滑動,也就是原生的.目前本專案的實際情況是,這部分並不是單獨一個頁面所開發出來的,是某個頁面的一部分,如果使用上述方法解決,需要將在梳理現有業務的前提下,重新建立元件,拆分原先的業務開發, 如果時間允許,這也未嘗不可,但由於時間緊迫,大概修改這個相容性問題僅有兩天的時間,所以拋棄了此種方案.但也汲取了解決問題的思路.不再現有技術實現上浪費時間,改變現有技術實現,更換技術實現方案,採用原生的垂直滑動效果.觀察了本專案前端的專案架構,採用的是Angular框架,同時與第三方元件庫primeng整合了.繼而從第三方元件庫中尋找解決方法,具體解決方案如下:
二.躬行此事
採用primeng的元件---Siderbar,同時結合原生的垂直滑動: overflow: auto;更換技術實現方案
- enter-result.html核心程式碼修改
<!-- 點選出現側滑-------楊曉風-2018-11-11 17:06:34----start -->
<button type="text" style="height:40px;border: none;background: url('assets/images/nav.png') no-repeat;width: 50px;margin-top: 7px;"
(click)="visibleSidebar1 = true" pButton icon="pi pi-plus" label="Show"></button>
<!-- 點選出現側滑-------楊曉風-2018-11-11 17:06:34----end -->
<!--楊曉風-------------側滑選單部分---------------2018-11-11 17:05:51-----start-->
<p-sidebar [(visible)]="visibleSidebar1" [baseZIndex]="10000" id="offCanvasSide">
<div class="enter_result_A">
<button id="offCanvasHide" type="button" class="mui-btn mui-btn-danger mui-btn-block" style="padding: 5px 20px;display: none;">關閉側滑選單</button>
<div *ngFor="let student of studentTestInfo ;index as i">
<ul class="mui-table-view" style="background-color:black">
<li id="{{i}}" class="mui-table-view-cell" style="padding-top: 0px;padding-bottom: 1px;background-color: rgb(212, 90, 19);">
<div *ngIf="(student.isLackExam==1)">
<a class="mui-navigate-right" style="font-weight:normal;font-size: 16px;color:rgb(239, 248, 247);">
{{student.studentCode}} {{student.studentName}}
</a>
</div>
</li>
<li id="{{i}}" class="mui-table-view-cell" *ngIf="student.isLackExam==0||student.isLackExam==null" style="background-color:black">
<div *ngIf="(student.score!=null && student.score!='')">
<a class="mui-navigate-right" style="font-size: 16px;color: gray;">
{{student.studentCode}} {{student.studentName}}
</a>
</div>
<div *ngIf="(student.score==null||student.score=='')">
<a class="mui-navigate-right" (click)="skip(student.studentCode)" style="font-weight:normal;font-size: 16px;color: white;">
{{student.studentCode}} {{student.studentName}}
</a>
</div>
</li>
</ul>
</div>
</div>
</p-sidebar>
<!--楊曉風-------------側滑選單部分---------------2018-11-11 17:05:51-----end-->
2. enter-result.css
/* 楊曉風------側滑樣式-------2018-11-11 17:07:12------------------------start------- */
.enter_result_A {
overflow: auto;
height: 100%;
background-color: black;
margin-left: -11px;
margin-top: -100px;
margin-bottom: -5px;
width: 235px;
}
.enter_result_A::-webkit-scrollbar {
width: 1px;
}
.enter_result_A::-webkit-scrollbar-track {
background-color: gray;
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
border-radius: 2em;
}
/* 楊曉風------側滑樣式-------2018-11-11 17:07:12------------------------end------- */
3.enter-result.ts
/**
* 側滑點選事件-------start--------------------------------------------------
*
* @author 楊曉風
* @since 2018-11-10 19:53:05
*/
visibleSidebar1 = false;
skip(code) {
this.visibleSidebar1 = false;
const swiper = new Swiper('.swiper-container', {
// direction: 'vertical',
pagination: {
el: '.swiper-pagination',
clickable: true,
},
paginationClickable: true,
longSwipesRatio: 0.3, //觸發swiper所需要的最小拖動距離比例
touchRatio: 1, //滑動的拖放的,如果是1表示滑動之後換下一個介面是一整塊,如果是0.5就表示才能滑一半。
observer: true, // 修改swiper自己或子元素時,自動初始化swiper
observeParents: true, // 修改swiper的父元素時,自動初始化swiper
});
const positionParm = this.studentTestInfo.findIndex(a => a.studentCode === code);
swiper.slideTo(positionParm);
}
// 楊曉風------側滑-----------------------2018-11-11 17:08:33----------------------end----------
至此,本專案中的相容性問題就完美解決了.
三.美麗插曲
1.總體解決問題的思路是:採用primeng的元件---Siderbar,同時結合原生的垂直滑動: overflow: auto;更換技術實現方案,原本技術實現點選事件出現側滑原始碼為:
<a href="#offCanvasSide" class="mui-icon mui-action-menu mui-icon-bars mui-pull-left"></a>
將此原始碼修改為click事件,讓primeng的siderbar出現,程式碼如下:
<a href="#offCanvasSide" (click)="visibleSidebar1 = true" class="mui-icon mui-action-menu mui-icon-bars mui-pull-left"></a>
你以為問題到此就問完美結束了嗎? no ! 這下,iPhone相容是解決了,驀然回首卻發現Android又不行了.可是之前命名已經測試過這種方法的可行性,測試的結果親眼目睹iPhone和Android都可行,現在居然是眼見的也不一定為實了.進一步查證的問題根源乃是:<a>標籤,這樣更換技術實現方案之後,a標籤的點選事件無法進行了,原以為是a標籤中使用mui的class導致的,修改程式碼如下:
<a ><i class="fa fa-bars" style="font-size: 30px;margin-top: 5px;"></i></a>
問題依舊,再換方案:
<button type="text" (click)="visibleSidebar1 = true"style="height:35px;border: none;background-color: #efeff4" (click)="visibleSidebar1 = true" pButton icon="pi pi-plus"
label="Show"> <a ><i class="fa fa-bars" style="font-size: 30px;margin-top: 5px;"></i></a></button>
問題依舊,拋棄使用a標籤和圖示的使用,直接使用button,通過定製化button,達到與原來的使用者體驗度無異,同時相容了iPhone和Android,最終程式碼便是躬行此事程式碼所貼上的核心程式碼:
<!-- 點選出現側滑-------楊曉風-2018-11-11 17:06:34----start -->
<button type="text" style="height:40px;border: none;background: url('assets/images/nav.png') no-repeat;width: 50px;margin-top: 7px;"
(click)="visibleSidebar1 = true" pButton icon="pi pi-plus" label="Show"></button>
<!-- 點選出現側滑-------楊曉風-2018-11-11 17:06:34----end -->
最終效果圖:
2.iPhone手機上無法輸入小數點,原始碼如下:
<input id="weight" #weight [(ngModel)]="li.weightResult" (focus)="inputResult(li)" (blur)="overBMI(weight.id,li)" type="number" (keyup)='calcBMIScore(li)' placeholder="格式:65" pattern="[0-9]*" oninput="if(value.length>4)value=value.slice(0,4)">
<label>公斤</label>
問題定位:
pattern="[0-9]*" 問題出在輸入框資料檢驗上,使用此校驗方式會由如下問題:
input:
(1)type = 'number'時, 當輸入的為非法數字 例如包括-+等,則在取value的值時判斷為非數字就會將value自動置為‘’,
且在ios中number型別不能成功調起數字鍵盤,需要使用pattern調取數字鍵盤,但是此時系統鍵盤沒有小數點
(2)type = 'tel' 調起數字鍵盤 沒有number value為空的問題,同樣在ios沒有小數點
(3)type = "text" pattern="[0-9]*" 在安卓無法調取數字鍵盤 ,在ios能調起數字鍵盤沒有小數點,同時能輸入-+/
解決方案:
更換資料校驗技術實現方案,目前暫時先去掉 pattern="[0-9]*"的資料校驗.
3.iPhone小螢幕,有一個按鈕被遮擋住,與樣式巢狀有關,每一種元件庫都有自己相應的樣式定義,那涉及到continer這樣的樣式又有自己的容器樣式,所以環環巢狀,可能會出現相互遮擋和衝突的問題.
結語:the best preparation for tomorrow is doing the best today
相關文章
- mui關閉側滑UI
- iOS 如何絲滑的側滑返回iOS
- Android側滑(右滑、下拉)返回控制元件 - SwipeBackLayoutAndroid控制元件
- Android入門教程 | DrawerLayout 側滑欄Android
- Activity側滑返回的實現原理
- 原生Android 側滑選單實踐(部分)Android
- Android自定義View(四)側滑佈局AndroidView
- Flutter 仿iOS側滑返回案例實現FlutteriOS
- vue移動端側滑皮膚元件Vue元件
- ItemTouchHelper實現可拖拽和側滑的列表
- 讓web擁有原生手機側滑選單那種順滑外掛Web
- 給你的頁面帶上側滑返回——SlideBackIDE
- css3實現側邊滑動選單CSSS3
- iOS開發UI篇--一個側滑選單SlidingMenuiOSUI
- Android側滑返回分析和實現(不高仿微信)Android
- Flutter 側滑欄及城市選擇UI的實現FlutterUI
- 利用DrawerLayout實現側滑選單學習總結
- Android-WItemTouchHelperPlus幾行程式碼搞定仿QQ側滑Android行程
- MaterialDesgin系列文章(二)NavigationView和DrawerLayout實現側滑功能NavigationView
- MaterialDesign系列文章(二)NavigationView和DrawerLayout實現側滑功能NavigationView
- HTML側邊部分內容滑動跟隨 左側跟隨滾動模組程式碼HTML
- Hack 蘋果系統 Api 實現 iOS TableViewCell 側滑方案蘋果APIiOSView
- Flutter | 超簡單仿微信QQ側滑選單元件Flutter元件
- [MUI] mui框架實現頁面間傳值UI框架
- 原生js實現一個側滑刪除取消元件(item slide)JS元件IDE
- 【Flutter】修改flutter_boost,相容iOS側滑的一個解決方案FlutteriOS
- (六)仿QQ首頁drawer/側滑刪除/浮動imgaeView/角標拖拽View
- 短視訊系統,長按側滑實現刪除的按鈕
- 短視訊平臺開發,依靠DrawerLayout實現側滑選單效果
- Flutter:手把手教你實現一個仿QQ側滑選單的功能Flutter
- 懸浮球只在一側滑動 並且是橫屏狀態下
- TV RecyclerView 滑動後操作保持落焦在左側第一個ViewView
- 短視訊軟體開發,按鈕側滑顯示各個選項
- 微信小程式-wepy-側滑刪除元件,支援自定義內容區在微信小程式元件
- mui toast自定義樣式UIAST
- MUI的踩坑筆記UI筆記
- JS IOS/iPhone的Safari瀏覽器不相容Javascript中的Date()問題如何解決JSiOSiPhone瀏覽器JavaScript
- 自定義控制元件?試試300行程式碼實現QQ側滑選單控制元件行程