内容简介:使用纯CSS,为需要动画展示的表单项加上如下代码:其中flag是展开与否的标志,max-height可以设置一个大于等于滑动区最大可能高度的值。若需求为整屏弹框且弹框内内容为展示类或无过多非常规定位,可以使用antd-mobile的Modal插件。配置属性可以实现顶部、底部划入和淡入淡出等动画。 只需要把弹框内容包裹到Modal内即可,以react为例:
使用纯CSS,为需要动画展示的表单项加上如下代码:
overflow:hidden; max-height:flag ? 0 : max-value; transition: max-height 0.5s; 复制代码
其中flag是展开与否的标志,max-height可以设置一个大于等于滑动区最大可能高度的值。
整屏弹框
若需求为整屏弹框且弹框内内容为展示类或无过多非常规定位,可以使用antd-mobile的Modal插件。配置属性可以实现顶部、底部划入和淡入淡出等动画。 只需要把弹框内容包裹到Modal内即可,以react为例:
import { Modal } from 'antd-mobile'; ... <Modal className="selectItem-wrapper" popup visible={this.state.flag} onClose={this.close} animationType="slide-up"> //Modal content </Modal> ... 复制代码
滑动嵌套
表示一个滑动元素内再嵌套一个滑动元素。且内部元素脱离文档流,会超出外部元素高度的情形。 显然单双项展开项中的方法不适用,外部元素的overflow:hidden会影响内部元素的展示。 需要引入动画生命周期,在外部元素下拉动画完之后将overflow:auto,收回动画时在设回overflow:hidden。 以react为例,利用reactTransitionGroup,其中slides为需要动态控制overflow的滑动元素。render函数中:
<CSSTransition in={isShow} timeout={100} classNames="slide" unmountOnExit> ...//slide item <CSSTransition> 复制代码
CSS:
.slides-enter { overflow: hidden; max-height: 0; } .slides-enter-active { overflow: hidden; max-height: 10; } .slides-enter-done { overflow: visible; } .slides-exit { overflow: hidden; max-height: 10; } .slides-exit-active { overflow: hidden; max-height: 0; } .slides-exit-done { overflow:hidden; } 复制代码
滑动中切换元素
例如滑动过程中表单从不可编辑状态变为可编辑状态。 解决方法还是利用动画生命周期,假设不可编辑框大小为10,可编辑框大小为20。 点击编辑按钮后,不可编辑DOM元素变成可编辑DOM元素,且保持高度为10,然后再动画展开到20。收起时,高度先由20滑动为10,然后调用动画完成钩子函数,改变为不可编辑状态。
reder函数中:
<CSSTransition in={isShow} timeout={100} classNames="slide" unmountOnExit onExited={() => { this.setState({ isShowEdit: true, }); }}> ...//Edit content or Ionf content <CSSTransition> 复制代码
CSS:
.personal-enter { overflow: hidden; max-height: 10; } .personal-enter-active { overflow: hidden; max-height: 20; transition: all 0.3s; } .personal-done-enter { overflow: visible; } .personal-exit { overflow: hidden; max-height: 20; } .personal-exit-active { overflow: hidden; max-height: 10; transition: all 0.3s; } .personal-done-exit { overflow:hidden; } 复制代码
底部或顶部切入的页面中有绝对定位侧边栏等特殊定位
在Android中以上述的解决方案都可以应用到此例中且无任何bug。 在IOS中上述方案会出现:
滑动卡顿
可以用 -webkit-overflow-scrolling:touch 属性解决。但此属性会引来更多的BUGGGG
position:fixed
此坑随意一查会有多种失效,留白等bug,但没有较为全面的总结。 应对此情形的有效解决方案为弹出框可以用以上任意方案,但淡出页面内用better-scroll包裹。(滴滴大佬研发的滑动插件,无框架限制)。 better-scroll在react中的应用方式为,js文件:
import Bscroll from "better-scroll"; ... componentDidMount(){ this.setState({ bScroll: new Bscroll(this.refs.bscroll, {probeType: 3,click: true}) }); } ... componentDidUpdate() { //组件更新后,如果实例化了better-scroll并且需要刷新就调用refresh()函数 if (this.state.bScroll) { this.state.bScroll.refresh(); } } ... render(){ ... <div className="bscroll" ref="bscroll"> <div className='bscroll-container'> ...//content </div> </div> ... } 复制代码
CSS:
.bscroll { width: 100%; height: 100%; overflow: hidden; } 复制代码
本人才疏学浅,以上仅为个人见解,欢迎批评指正讨论~~
以上所述就是小编给大家介绍的《滑动动效解决方案(CSS antd-mobile better-scroll react-transition-group)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
你凭什么做好互联网
曹政 / 中国友谊出版公司 / 2016-12 / 42.00元
为什么有人可以预见商机、超越景气,在不确定环境下表现更出色? 在规则之外,做好互联网,还有哪些关键秘诀? 当环境不给机会,你靠什么翻身? 本书为“互联网百晓生”曹政20多年互联网经验的总结,以严谨的逻辑思维分析个人与企业在互联网发展中的一些错误思想及做法,并给出正确解法。 从技术到商业如何实现,每个发展阶段需要匹配哪些能力、分解哪些目标、落实哪些策略都一一点出,并在......一起来看看 《你凭什么做好互联网》 这本书的介绍吧!