linux 前端开发工具|web前端开发工具 bp|前端h5的开发工具
一、容器整体滑动(DEMO只演示A-B-C-B,下同)
具体实现重点代码解析:
布局方式:父容器相对定位并撑满整个device的viewport,子页面绝对定位并依次并排排列在viewport中(从左到右)
[blockquote].view-container{ // 父容器布局
position:relative;
width:100%;
height:100%;
padding-top:40px;
box-sizing:border-box;
-webkit-transform:translate3d(0,0,0);
-webkit-backface-visibility:hidden
}
.page-container{ // 子容器布局
position:absolute;
z-index:1;
top:0;
left:0;
width:100%;
height:100%;
overflow:hidden;
background-color:#c8c8c8
}[/blockquote]
滑动方式:父容器利用CSS3的动画transform3D进行X轴的滑动(js控制直接喷到DOM节点中)
[blockquote]-webkit-transform:translate3d(-100%,0,0);
-webkit-transition:300ms;
transform:translate3d(-100%,0,0);
transition:300ms;[/blockquote]
二、单个页面滑动
具体实现重点代码解析:
布局方式:父容器高度100%,子容器正常文档流布局(X轴隐藏,Y轴默认原生滚动)
[blockquote].view-container{
height:100%
}
.page-container{
position:100%;
width:100%;
min-height:100%;
overflow-x:hidden;
backgrond-color:#c8c8c8;
}[/blockquote]
滑动方式:利用class添加动画样式(keyframes animation),左右进出各一种
[blockquote]@-webkit-keyframes sliderightout{
from{
-webkit-transform:translateX(0);opacity:1
}
to{
-webkit-transform:translateX(50%);opacity:0
}
}
@-webkit-keyframes slideleftin{
from{
-webkit-transform:translateX(-50%);opacity:0
}
to{
-webkit-transform:translateX(0);opacity:1
}
}
@-webkit-keyframes slideleftout{
from{
-webkit-transform:translateX(0);opacity:1
}
to{
-webkit-transform:translateX(-50%);opacity:0
}
}
@-webkit-keyframes sliderightin{
from{
-webkit-transform:translateX(50%);opacity:0
}
to{
-webkit-transform:translateX(0);opacity:1
}
}[/blockquote]
[blockquote].slideleftout{
-webkit-animation:slideleftout 350ms ease-in-out;
}
.slideleftin{
-webkit-animation:slideleftin 350ms ease-in-out;
}
.sliderightout{
-webkit-animation:sliderightout 350ms ease-in-out;
}
.sliderightin{
-webkit-animation:sliderightin 350ms ease-in-out;
}
.animatestart{
position:absolute;
left:0;
top:0;
z-index:3;
width:100%;
height:100%;
overflow-x:hidden
}
.animatestart.page-container{
overflow-x:hidden;
-webkit-transform:translate3d(0,0,0);
-webkit-backface-visibility:hidden;
background-color:#f5f5f5;
}
[/blockquote]
三、双页联动滑动
具体实现重点代码解析:
布局方式:类似于第一种,父容器和子容器都绝对定位于viewport中,不同点是父类的上级布局更加细分,且大胆使用了webkit-box弹性盒子;子容器没有并排显示,而是重叠隐藏
[blockquote].view-container{
position:absolute;
top:0;
left:0;
widht:100%;
height:100%;
}
.page-container{
position:absolute;
z-index:1;
top:0;
bottom:0;
left:0;
right:0;
width:100%;
height:100%;
overflow:hidden;
background-color:#f8f8f8;
-webkit-transform:translate3d(0,0,0);
-webkit-backface-visibility:hidden;
}[/blockquote]
滑动方式:滑动开始时先将隐藏的下一个子页面拉到viewport右侧与当前子页面平行,然后紧接着两个子页面同步滑动,最后回归样式,中间的时间差事件均有js控制(详见demo逻辑)。
四、三舞台双页视差滑动
模拟动画效果见下图(上),分解逻辑图见下图(下):
布局方式:这里我设定了三舞台(stage)的概念,其实就是当前viewport的左右侧各虚拟一个同样大小的viewport,当然,正常情况下我们只能看到当前舞台的子页面,leftstage是-100%的位置,rightstage是100%的位置,我们分别用三个class来定义:pageOld、pageInit、pageNew来代替
[blockquote].pageInt{
-webkit-transform:translateX(0);
transform:translateX(0);
}
.pageOld{
-webkit-transform:translateX(-100%);
transform:translateX(-100%);
}
.pageNew{
-webkit-transform:translateX(100%);
transform:translateX(100%);
}[/blockquote]
滑动方式:
1,定义正向(向左滑)和反向(向右滑)两个概念,;
2,定义快速和慢速两个概念;
则就是四种动态两种组合:正向快速+正向慢速、反向快速+反向慢速;
[blockquote].slideSlow{
-webkit-transition:-webkit-transform 400ms cubic-bezier(0.42,0.58,1.0) 0.1s;
-ms-transition:transform 400ms cubic-bezier(0.42,0.58,1.0) 0.1s;
}
.slideFast{
-webkit-transition:-webkit-transform 300ms cubic-bezier(0.42,0.58,1.0);
-ms-transition:transform 300ms cubic-bezier(0.42,0.58,1.0);
}
.slideSlowBack{
-webkit-transition:-webkit-transform 400ms cubic-bezier(0.42,0.58,1.0);
-ms-transition:transform 400ms cubic-bezier(0.42,0.58,1.0);
}
.slideFastBack{
-webkit-transition:-webkit-transform 300ms cubic-bezier(0.42,0.58,1.0) 0.1s;
-ms-transition:transform 300ms cubic-bezier(0.42,0.58,1.0) 0.1s;
}[/blockquote]
其中在三舞台视差滑动中的滑动曲线是经过数次的真机实验后找到的参数(cubic-bezier(0.42, 0, 0.58, 1.0)),这条曲线的滑动形态最接近IOS APP页面的滑动,希望对大家有用。
前端开发0基础视频|屈臣氏前端开发面试|前端容易还是开发容易
评论前必须登录!
注册