第二个页面只有移动端,是一个上下滑动嵌套左右滑动的页面。
用了一个叫swiper的插件http://www.swiper.com.cn/
这是第二个页面,效率比第一个页面提高了些。
给了一个类似的网站,让我仿造着写。
1.遇到的第一个问题就是,屏幕的宽度是可以用CSS 的width属性设置成100%来固定的,但是每一分屏的高度是不能直接用CSS设置成功的。仔细研究过例子页面的代码,发现它是通过JavaScript获取屏幕的高度然后将每一个分屏设置成屏幕的高度。
代码在这里:
HTML:
<body>
<div class="sharemask hide">
</div>
<div class="swiper-container swiper-container-vertical" id="first">
<div class="swiper-wrapper">
<div class="swiper-slide s1">
<div class="middle-container">
<a class="access-btn" href=""></a>
<a class="download" href=""></a>
<a class="arrowdown"><img src="../image/arrow.png"> </a>
</div>
</div>
<div class="swiper-slide s2" >
<div class="middle-container">
<a class="share" ></a>
<a class="arrowdown"><img src="../image/arrow.png"> </a>
<div class="popup hide" id="nvshen">
<div class="pop-content">
<span class="number">123456789</span>
<a class="close"></a></div>
</div>
</div>
</div>
<div class="swiper-slide s3">
<div class="middle-container">
<a class="fuli" href=""></a>
<a class="arrowdown"><img src="../image/arrow.png"> </a>
</div>
</div>
<div class="swiper-slide s4">
<div class="swiper-container swiper-container-horizontal" id="swiper1">
<div class="swiper-wrapper">
<div class="swiper-slide hh1">
<a class="arrowleft" ></a>
<a class="arrowright"></a>
<a class="arrowdown"><img src="../image/arrow.png"> </a>
</div>
<div class="swiper-slide hh2">
<a class="arrowleft" ></a>
<a class="arrowright"></a>
<a class="arrowdown"><img src="../image/arrow.png"> </a>
</div>
<div class="swiper-slide hh3">
<a class="arrowleft" ></a>
<a class="arrowright"></a>
<a class="arrowdown"><img src="../image/arrow.png"> </a>
</div>
<div class="swiper-slide hh4">
<a class="arrowleft" ></a>
<a class="arrowright"></a>
<a class="arrowdown"><img src="../image/arrow.png"> </a>
</div>
<div class="swiper-slide hh5">
<a class="arrowleft" ></a>
<a class="arrowright"></a>
<a class="arrowdown"><img src="../image/arrow.png"> </a>
</div>
</div>
<!--分页器--!>
<!-- <div class="swiper-pagination"></div>-->
</div>
</div>
<div class="swiper-slide s5">
<div id="mask" class="hide"></div>
<div class="middle-container">
<a class="popups" id="qiandao1"></a>
<div class="popup hide" id="popup1">
<div class="pop-content">
<span class="number">123456789</span>
<a class="close"></a>
</div>
</div>
<a class="popups" id="qiandao3"></a>
<div class="popup hide" id="popup3">
<div class="pop-content">
<span class="number">123456789</span>
<a class="close"></a>
</div>
</div>
<a class="popups" id="qiandao5"></a>
<div class="popup hide" id="popup5">
<div class="pop-content">
<span class="number">123456789</span>
<a class="close"></a>
</div>
</div>
<a class="popups" id="qiandao7"></a>
<div class="popup hide" id="popup7">
<div class="pop-content">
<span class="number">123456789</span>
<a class="close"></a>
</div>
</div>
<span class="qiandaocount">0</span>
<a class="qiandao"></a>
<div class="popup hide" id="success">
<div class="pop-content">
<a class="close"></a></div>
</div>
<div class="popup hide" id="fail">
<div class="pop-content">
<a class="close"></a></div>
</div>
<a class="arrowdown"><img src="../image/arrow.png"> </a>
</div>
</div>
<div class="swiper-slide s6">
<div class="middle-container">
<a class="new""></a>
<a class="grate" href=""></a>
</div>
</div>
</div>
</div>
<script src="js/jquery-1.12.3.min.js"></script>
<script src="js/swiper-3.4.0.jquery.min.js"></script>
<script src="js/mobile_js.js"></script>
</body>
JavaScript:
var a=$(window).height();
var screenHeight=a;
$('#first').height(screenHeight);
$('#swiper1').height(screenHeight);
$('.sharemask').height(screenHeight);
CSS:
加第三个页面的时候出现了拼写错误,导致没有加上去。orz
2.第一次切图的时候,按钮和背景图分开切,然后对按钮进行定位,后来说把按钮和背景图一起切下来,然后按照百分比定位a标签的位置,然后就遇到了一个问题。因为不同屏幕的宽高比是不同的,所以如果都用相同的百分比来定位的话肯定会出现不同的手机中的a标签在和背景图中的按钮位置不一致的情况。
So, how to solve this problem?
Experience is vital in solving problems.
所以之前的例子网站是如何控制显示的位置呢。发现是在有内容(a标签)的区域包裹一层div,然后将这个div的宽高比设置成和切好的背景图(最小的有内容的部分)的宽高比一致,因为高度是固定的一屏的高度,所以只要设置这个容器的宽度就可以了。具体就是,设计师做这张图的时候是宽度为1100px,是因为不同手机显示的宽度不一样(但是background-size设置的是宽度auto,高度100%),这个背景图中有内容(就是需要放节点的区域,在这个网页中是a标签)的最小的宽度是750px,所以将这个容器的高度设置成100%,宽度设置成和750/1334(设计稿的高度,因为背景在高度上是全部显示的)一致的宽高比,这样再用百分比定位节点的时候就不会出现不同手机屏幕中相对位置不一样(也就是和背景图中的按钮图案的位置不一致)的情况了。
代码在这里:
JavaScript:
var mcW=$('.middle-container').height()*750/1334;
$('.middle-container').width(mcW);
//
var mcW2 = $('.popup').height();
$('.popup').width(mcW2);
CSS:
.middle-container {
height: 100%;
margin: auto;
position: absolute;
left: 0;
right: 0;
z-index: 2;
}
3. 上一个问题解决掉之后出现了新的问题,就是提示分享的mask的宽度设置成100%嘛,但是它在那个中间容器的内部,所以它显示的时候距离左右边界会出现空白,问题的解决就是:把这个mask放在最外层,也就是紧挨着body标签,这样他的宽度就是整个屏幕的宽度了。同时还要将这个mask的z-index设置为2,这样在出现这个mask的时候页面就不会再滑动了。
代码在这里:
JavaScript:
CSS:
.sharemask{
position: fixed;
width: 100%;
background: url("../image/fenxiang.png")top right no-repeat;
-webkit-background-size: auto 40%;
background-color:rgba(0,0,0,0.6);
z-index: 2;
}
4.弹跳的向下箭头,和左右箭头。
代码在这里:
CSS:
@-webkit-keyframes downa {
0% {
bottom:3%; }
100% {
bottom:4%; } }
@keyframes downa {
0% {
bottom: 3%; }
100% {
bottom: 4%; } }
@-webkit-keyframes nexta {
0% {
right: 0; }
100% {
right: 1%; } }
@keyframes nexta {
0% {
right: 0; }
100% {
right: 1%; } }
@-webkit-keyframes preva {
0% {
left: 0 }
100% {
left: 1% } }
@keyframes preva {
0% {
left: 0; }
100% {
left: 1%; } }
#first .arrowdown{
position: absolute;
display: block;
height: 30px;
background-size: contain;
width: 35px;
left: 45%;
bottom: 3%;
animation: downa 1s forwards infinite ease-in-out alternate;
-webkit-animation: downa 1s forwards infinite ease-in-out alternate;
}<pre name="code" class="css">#swiper1 .arrowleft{
background: url("../image/left.png")no-repeat;
position: absolute;
display: block;
height: 5%;
background-size: contain;
width: 6%;
left: 0;
bottom: 50%;
animation: preva 1s forwards infinite ease-in-out alternate;
-webkit-animation: preva 1s forwards infinite ease-in-out alternate;
}
#swiper1 .arrowright{
background: url("../image/right.png")no-repeat;
position: absolute;
display: block;
height: 5%;
background-size: contain;
width: 6%;
right: 0;
bottom: 50%;
animation: nexta 1s forwards infinite ease-in-out alternate;
-webkit-animation: nexta 1s forwards infinite ease-in-out alternate;
}
5.弹框中的文字居中
设置了中间容器,令它的宽高比和设计图 一样还是不能实现居中。后来忽然意识到直接将弹框的text-align设置为center就可以了。愚蠢。
6.初始化外层swiper和内层嵌套的swiper:
代码在这里:
JavaScript:
var oSwiper = new Swiper('#first',{
direction : 'vertical',
mousewheelControl: true,
// onSetTransition: function(swiper)
// {
// console.log(swiper.activeIndex);
// if(swiper.activeIndex==5)
// {
// swiper.params.onlyExternal=true;
// swiper.disableMousewheelControl();
// }else
// {
// swiper.params.onlyExternal=false;
// swiper.enableMousewheelControl();
// }
//
// }
});
var mySwiper = new Swiper('#swiper1',{
loop: true,
direction: 'horizontal',
// 如果需要分页器
pagination: '.swiper-pagination',
mousewheelControl : true
});
CSS:
7.设置字体的大小:vh单位:1vh等于屏幕高度的1%。
第二个页面踩的坑少了些。
</pre><pre>