alter,modal彈框的使用心得
需求中,用到彈框來提醒使用者。在開源的元件中,選擇了modal和alter元件完成。
alter是在modal的基礎上封裝而成的,相對於modal,少了些暴露的屬性,修飾footer節點的樣式的方式不同和自帶的動畫效果。
modal會根據不同平臺顯示各自平臺的樣式。不用自定義class,執行工程,檢視彈框節點處的元素的class即可區分iOS,和android平臺。區分出不同平臺,就可修改不同平臺上的樣式。在實踐中不同平臺的modal和alter的區分class是一樣的,iOS平臺上的class為:.am-modal.am-modal-transparent,android平臺上的class為:.am-modal.am-modal-transparent.am-modal-android。
專案中的彈框,不止一個,樣式要求統一,可以複用自定義彈框的css,最好再將css的引用放在全域性的樣式檔案中。彈框有的有title,message,一個按鈕或兩個按鈕,有的沒有title,只有message和按鈕,且message的高度都是根據內容自適應的,且沒有title時,title的高度為0。
在開發時,iOS上顯示的沒有title和只有一行message的彈框,message的高度小於按鈕的高度,不協調。若此時用的alter實現的彈框,因沒有暴露class屬性,不能自定義class,來單獨修改message的高度。若要單獨修改message的高度,不影響其他有title,有message的彈框的樣式,有兩種方法:
方法一:將alter實現的彈框,換成modal實現。modal有暴露的class屬性,利用自定義的class,實現單獨修改message的高度。
modal實現:<modal calssName='extra' ></extra>
css實現:&.extra {修改message的高度}
方法二:將message的內容,前後加換行,擴大message的高度。程式碼實現如下:
message的內容為:<span><br />原message的內容 <br /><br /> </span>。(注意,後一個換行符,要用兩個<br />,用一個的話,會被忽略掉,沒有換行效果)
開發中,使用modal實現的彈框,設定max-height的高度,來限制彈框的最大高度,用overflow-y: scroll超過最大高度後,設定滑動。通過modal的visible屬性值,控制彈框的出現和消失。新增在render方法體內,例如:render(){ return { <modal visible={isShow}></modal> }}。假設此介面,可以觸發多次彈框(message不同),且每一個彈框的message內容很長,達到了最大高度,可以滑動展示。此時的modal實現的彈框,是複用的。如果將彈框中的message滑動到底部,消失。再次出現的彈框,message依然是滑動到底部的。不符合需求。解決辦法是不復用,每次彈框出現,都是新的一個。程式碼為:
render(){ return { isShow ? <modal visible={isShow}></modal> : null }}