简易万年历这个案例是比较有意义的,虽然是个小demo,但涵盖的知识是一点也不少啊!需要静下心来好好理解,完全理解下来,就会觉得也没那么难,理解了这个demo,后续很多东西都知道怎么写了。好啦,先上HTMl部分的代码。
1 <body> 2 <div id="tab" class="calendar"> 3 <ul id="box"> 4 <li class="active"> 5 <h2>1</h2> 6 <p>JAN</p> 7 </li> 8 <li> 9 <h2>2</h2> 10 <p>FER</p> 11 </li> 12 <li> 13 <h2>3</h2> 14 <p>MAR</p> 15 </li> 16 <li> 17 <h2>4</h2> 18 <p>APR</p> 19 </li> 20 <li> 21 <h2>5</h2> 22 <p>MAY</p> 23 </li> 24 <li> 25 <h2>6</h2> 26 <p>JUN</p> 27 </li> 28 <li> 29 <h2>7</h2> 30 <p>JUL</p> 31 </li> 32 <li> 33 <h2>8</h2> 34 <p>AUG</p> 35 </li> 36 <li> 37 <h2>9</h2> 38 <p>SEP</p> 39 </li> 40 <li> 41 <h2>10</h2> 42 <p>OCT</p> 43 </li> 44 <li> 45 <h2>11</h2> 46 <p>NOV</p> 47 </li> 48 <li> 49 <h2>12</h2> 50 <p>DEC</p> 51 </li> 52 </ul> 53 <div class="text" id="txt"> 54 <h2>1月活动</h2> 55 <p>快过年了,大家可以商量着去哪玩吧~</p> 56 </div> 57 </div> 58 </body>
样式可以自己更改哈!
1 <style>
2 * {
3 padding: 0;
4 margin: 0;
5 }
6
7 li {
8 list-style: none;
9 }
10
11 body {
12 background: #f6f9fc;
13 font-family: arial;
14 }
15
16 .calendar {
17 width: 210px;
18 margin: 0 auto;
19 padding: 10px 10px 20px 20px;
20 background: #eae9e9;
21 }
22
23 .calendar ul {
24 width: 210px;
25 overflow: hidden;
26 padding-bottom: 10px;
27 }
28
29 .calendar li {
30 float: left;
31 width: 58px;
32 height: 54px;
33 margin: 10px 10px 0 0;
34 border: 1px solid #fff;
35 background: #424242;
36 color: #fff;
37 text-align: center;
38 cursor: pointer;
39 }
40
41 .calendar li h2 {
42 font-size: 20px;
43 padding-top: 5px;
44 }
45
46 .calendar li p {
47 font-size: 14px;
48 }
49
50 .calendar .active {
51 border: 1px solid #424242;
52 background: #fff;
53 color: #e84a7e;
54 }
55
56 .calendar .active p {
57 font-weight: bold;
58 }
59
60 .calendar .text {
61 width: 178px;
62 padding: 0 10px 10px;
63 border: 1px solid #fff;
64 padding-top: 10px;
65 background: #f1f1f1;
66 color: #555;
67 }
68
69 .calendar .text h2 {
70 font-size: 14px;
71 margin-bottom: 10px;
72 }
73
74 .calendar .text p {
75 font-size: 12px;
76 line-height: 18px;
77 }
78 </style>
下面是javascript的代码,会加上注释,以防小白白看不懂哈!
1 <script>
2 // 模拟后端数据
3 var arr = ['快过年了,大家可以商量着去哪玩吧~',
4 '大家好好学习吧222222~~~',
5 '大家好好学习吧222222333~~~',
6 '大家好好学习吧222444222~~~',
7 '大家好好学习555吧222222~~~',
8 '大家好好学习吧666222222~~~',
9 '大家好好学习吧227772222~~~',
10 '大家好好学习吧28888822222~~~',
11 '大家好好学习吧99999222222~~~',
12 '大家好好学习10000000吧222222~~~',
13 '大家好好学习吧111111222222~~~',
14 '大家好好学习吧22222200000000000~~~'];
15 // 获取所有的li
16 var array = document.querySelectorAll("#tab ul li");
17 // 获取h2和p标签
18 var h2 = document.querySelector("#txt h2");
19 var p = document.querySelector("#txt p");
20 // 遍历数组,所有li绑定点击事件
21 for (var i = 0; i < array.length; i++) {
22 // 定义一个不可见的健(属性),将i的存放好,【提前给每个li都编号(默认没有编号)】
23 array[i].num = i;
24 // 点击事件
25 array[i].onclick = function () {
26 // 遍历数组,因为外面的i在这里是获取不到的,所以要重新遍历
27 for (var j = 0; j < array.length; j++) {
28 // 将所有li的类名都更改为空,即不存在样式
29 array[j].className = "";
30 }
31 // 被点击的那个对象的类名更改为active
32 this.className="active";
33 // 同时更改h2和p标签里面的内容
34 h2.innerHTML=this.num+1+"月活动";
35 p.innerHTML=arr[this.num];
36 }
37 }
38 </script>
理解下来,还是可以的;第一个难点是给所有li绑定事件的时候,循环是立即执行的,所以事件里面并不能直观的知道点击的是哪个,所以只能通过this关键字来获取;第二个难点是事实上用this我们同样不能知道是那个li,那样怎么更改所对应的信息呢,给编号,在事件发生前,循环内,给li一个不可见的属性(自己定义),存储每个li所对应的的下标。如果还是不能理解,评论留言!