2-1 页面的横向布局
本节编程练习不计算学习进度,请电脑登录imooc.com操作

页面的横向布局

本章正式进入七夕这个主题效果是如何实现的讲解,首先回顾下视频的内容整个效果都是以小男孩走路为前提,在三个主题页面中切换并在每个主题页面中会有不同的效果呈现

我们可以这样理解,效果上

通过二者的速率变化,可以让用户产生一个视觉上的错觉,也可以称为视觉差,感觉就是人物在不断走路前行

从页面的效果,考虑页面整体布局结构应该需要这样

布局上很好处理,我们做3个块级元素,每一个块元素代表一个主题页面容器节点。然后设置一个父容器是3个块元素的宽,通过float处理,这样就形成了一个横向的3个无缝拼接的页面

页面布局结构如下

<ul class='content-wrap'>
    <!-- 第一副画面 -->
    <li> 页面1 </li>
    <!-- 第二副画面 -->
    <li> 页面2 </li>
    <!-- 第三副画面 -->
    <li> 页面3 </li>
</ul>

这样虽然是形成了横向布局与无缝拼接,不过可视区范围永远只能显示出一个主题页面的尺寸,所以我们需要再给祖先节点上套一个限制显示区域的节点

在实现上,通过CSS布局是可以直接处理的。本课程中做了自适应页面布局的处理,为了更精确页面的尺寸,这里采用JavaScript动态计算绝对的尺寸

具体的实现我们参考右边的代码区域

任务

打开index.html文件,在代码的24行填入相应代码,通过溢出隐藏多余的页面

hidden

在80行填入相应代码,通过JS动态设置每一个元素的尺寸

slide.css({
    width  : width + 'px',
    height : height + 'px'
});
  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  6. <title>慕课七夕主题</title>
  7. <script src="http://img1.sycdn.imooc.com//down/55ac9a860001a6c500000000.js"></script>
  8. <style type="text/css">
  9. * {
  10. padding: 0;
  11. margin: 0;
  12. }
  13.  
  14. ul,
  15. li {
  16. list-style-type: none;
  17. }
  18. /*主体部分*/
  19. #content {
  20. width : 60%;
  21. height : 60%;
  22. top : 20%;
  23. left : 20%;
  24. overflow : ?;
  25. position : absolute;
  26. border : 1px solid #ccc;
  27. }
  28.  
  29. .content-wrap {
  30. position: relative;
  31. }
  32. .content-wrap > li {
  33. width: 100%;
  34. height: 100%;
  35. background: #CAE1FF;
  36. color: red;
  37. float: left;
  38. overflow: hidden;
  39. position: relative;
  40. }
  41. li:nth-child(2) {
  42. background: #9BCD9B;
  43. }
  44.  
  45. li:nth-child(3) {
  46. background: yellow;
  47. }
  48.  
  49. </style>
  50. </head>
  51.  
  52. <body>
  53. <div id='content'>
  54. <ul class='content-wrap'>
  55. <!-- 第一副画面 -->
  56. <li> 页面1 </li>
  57. <!-- 第二副画面 -->
  58. <li> 页面2 </li>
  59. <!-- 第三副画面 -->
  60. <li> 页面3 </li>
  61. </ul>
  62. </div>
  63. <script type="text/javascript">
  64. var container = $("#content");
  65. // 获取第一个子节点
  66. var element = container.find(":first");
  67. // li页面数量
  68. var slides = element.find("li");
  69. // 获取容器尺寸
  70. var width = container.width();
  71. var height = container.height();
  72. // 设置li页面总宽度
  73. element.css({
  74. width : (slides.length * width) + 'px',
  75. height : height + 'px'
  76. });
  77. // 设置每一个页面li的宽度
  78. $.each(slides, function(index) {
  79. var slide = slides.eq(index); //获取到每一个li元素
  80. // ?
  81. });
  82. </script>
  83. </body>
  84.  
  85. </html>
下一节