第一天20170504
常用学习网站推荐 1.W3School: http://www.w3school.com.cn/
2.菜鸟教程: http://www.runoob.com/
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <!-- HBuilder 使用快捷键 --> <!--注释或取消注释:ctrl + /--> <!-- 自动提示: alt + / --> <!-- 代码格式化: ctrl + shift + F --> <!-- 网页的构成: 1.标签:决定内容 2.样式:决定内容样子 --> <!-- 标签: 1.文本 2.图片 3.跳转 --> 1.编辑器代码提示快捷键 <p>先写p再按Tab键</p> <!-- < 为HTML 字符实体 --> <p>先按<再按p再按回车键</p> <hr /> <!-- 这是一个段落标记 --> <p>2.这是一个段落标记 </p> <hr /> 3.html按空格键生成中多个空格只会显示一个 <hr /> 4.图片标签<br /> <!-- src:图片地址 --> <img src="img/2.jpg" alt="2.jpg" /> <br /> <!-- 外部链接图片 --> <img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2307466906,2255218472&fm=117&gp=0.jpg" alt="" /> <hr /> 5.跳转链接 <a href="http://www.qq.com" target="_blank"><img src="img/2.jpg" alt="" /></a> <hr /> </body> </html>第二天20170505
css
选择器的使用
例子1
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>样式</title> <style type="text/css"> /*选择器*/ /*1.标签选择器*/ p{ font-size: 30px; /*RGB:一般是6位16进制,每两位代表一种颜色*/ color: #fff; background-color: #000000; } img{ /*一般控制图片只会控制宽高其中一个,图片会自动按比例伸缩*/ width:300px; height: 200px;; } /*2.id选择器(注意:一般这个页面相同的id只能出现一个)*/ #p2{ color: #abc; background-color: green; } /*3.class选择器*/ .p3{ color: red; } </style> </head> <body> <!-- 样式: --> <p>第一个段落</p> <p id="p2">第二个段落</p> <p class="p3">第三个段落</p> <p class="p3">第四个段落</p> <img src="img/2.jpg" /> </body> </html> 例子2 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> /*类box内部的所有p标签*/ .box p{ color: blue; } /*类p2和p3使用相同的样式*/ .p2,.p3{ color:green; } </style> </head> <body> <div class="box"> <p>内部第一个</p> <p>内部第二个</p> </div> <p>外部第一个</p> <p class="p2">外部第二个</p> <p class="p3">外部第三个</p> </body> </html>九大位置定位
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>九大位置</title> <style type="text/css"> * { /*外边距*/ margin: 0; /*4个参数顺时钟*/ /*margin:10px 10px 10px 10px;*/ /*2个参数(对边):第一个参数上下,第二个左右*/ /*auto 自动计算距离*/ /*margin: 0px auto ;*/ /*内边距*/ padding: 0; } div { width: 150px; height: 150px; background-color: cornflowerblue; } .div01 { position: absolute; top: 0px; left: 0px; } .div02 { position: absolute; top: 0px; /*外部元素50%*/ /*left:配合absolute定位一起用,距离父布局*/ left: 50%; /*translate:平移*/ /*-50%代表自身50%*/ transform:translateX(-50%); } .div03 { position: absolute; top: 0px; right: 0px; } .div04 { position: absolute; top: 50%; left: 0px; transform:translateY(-50%); } .div05 { position: absolute; top: 50%; left: 50%; transform: translateY(-50%) translateX(-50%); /*简写*/ /*transform: translate(-50%,-50%);*/ } .div06 { position: absolute; top: 50%; right: 0px; transform:translateY(-50%); } .div07 { position: absolute; bottom: 0px; left: 0px; } .div08 { position: absolute; bottom: 0px; left: 50%; transform:translateX(-50%); } .div09 { position: absolute; bottom: 0px; right: 0px; } </style> </head> <body> <div class="div01"> </div> <div class="div02"> </div> <div class="div03"> </div> <div class="div04"> </div> <div class="div05"> </div> <div class="div06"> </div> <div class="div07"> </div> <div class="div07"> </div> <div class="div08"> </div> <div class="div09"> </div> </body> </html> 绝对定位 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin: 0px; padding: 0px; } div{ width: 100px; height: 100px; background-color: blue; } /*一旦使用absolute:绝对定位,意味着每个div都有独立的层。之间会相互覆盖 覆盖原则:下面的标签会覆盖上面的标签 同时z-index属性开始生效,控制z轴:默认值为0; * */ .div01{ position: absolute; z-index: 1; background-color: blue; } .div02{ position: absolute; background-color: red; } /*关于absolute绝对定位的嵌套 标签设置了绝对定位。那么它自己本身相对的父元素是它就近相同设置了绝对位置的标签。 如果,一直向上找,都每找到设置了绝对定位的标签,那就相对于整个HTML页面。 * */ .father{ position: absolute; width: 400px; left: 40%; height: 400px; background-color: blueviolet; margin:100px auto; } .child01{ position: absolute; top:200px; background-color: #000; } .child02{ position: absolute; background-color: #f0f; } </style> </head> <body> <div class="div01"></div> <div class="div02"></div> <br /> <div class="father"> <div class="child01"> </div> <div class="child02"> </div> </div> </body> </html> 相对定位例1
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin:0; padding: 0; } body,html{ width:100%; height: 100%; } .header{ width:100%; height: 30%; background-color: goldenrod; } .content{ /*相对定位不会破坏标签所在的位置。方便内部标签使用绝对定位,定位到具体位置*/ position:relative; width:100%; height: 60%; background-color: royalblue; } .footer{ width:100%; height: 10%; background-color: greenyellow; } .content .left{ width: 30%; height: 30%; background-color: darkcyan; position:absolute; top:50%; transform: translateY(-50%); /*备注:一定不要使用relative定位置*/ } .content .right{ width: 30%; height: 30%; background-color: coral; position:absolute; top:50%; right: 0; transform: translateY(-50%); } </style> </head> <body> <div class="header"> </div> <div class="content"> <div class="left"> </div> <div class="right"> </div> </div> <div class="footer"> </div> </body> </html> 例2 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin:0; padding:0; } .div01{ /*相对定位,四个方向的属性都是相对自己位置偏移*/ position: relative; width:100px; height:100px; background-color: blue; top:50px; z-index: 1; } .div02{ position:relative; width: 100px; height: 100px; background-color: darkcyan; } /*1.相对定位一般配合绝对定位一起使用。父元素使用相对定位,子元素使用绝对定位*/ /*2.相对定位不会影响到标签的位置,或者不会影响整个页面布局*/ </style> </head> <body> <div class="div01"></div> <div class="div02"></div> </body> </html> 应用小例子核心代码html代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>照片墙</title> <link rel="stylesheet" type="text/css" href="css/main.css"/> </head> <body> <div class="box"> <img src="img/1.jpg" /> <img src="img/2.jpg" /> <img src="img/3.jpg" /> <img src="img/4.jpg" /> <img src="img/5.jpg" /> <img src="img/6.jpg" /> <img src="img/7.jpg" /> <img src="img/8.jpg" /> <img src="img/9.jpg" /> </div> </body> </html>css代码
body{ background-color: blueviolet; } .box{ width:960px; /*水平居中*/ margin: 50px auto; } img{ /*内边距*/ padding:10px; background-color: white; /*阴影参数: * 参数1:阴影水平偏移 * 参数2:阴影垂直偏移 * 参数3:模糊度 * 参数4:颜色 * */ box-shadow: 10px 10px 10px black; /*动画过度效果*/ transition: all 0.5s; /*让图片使用z-index属性,同时不改变图片位置*/ position: relative; } /*选择img中第一个img*/ /*()里面可以填固定的子类序号或者填奇偶的字符*/ img:nth-child(odd){ /*旋转*/ transform: rotate(-10deg); } img:nth-child(even){ transform: rotate(10deg); } /*鼠标滑动监听*/ img:hover{ /*缩放*/ transform: scale(1.2); z-index: 1; box-shadow: none; } 运行效果图:
固定定位
例1
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> body,html{ height: 300%; } .fix { /*固定定位*/ position: fixed; right: 0; bottom: 0; width: 400px; height: 400px; background-color: red; /*背景图片 参数:1.图片路径,2.平铺方式,3,图片位置*/ background: url(img/1.jpg) no-repeat center; /*参数:1边框宽度,2.边框样式,3,边框颜色*/ border:10px solid goldenrod; } </style> </head> <body> <div class="fix"> </div> </body> </html> 实例 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; } .div01 { position: fixed; bottom: 0px; right: 0px; line-height: 0px; z-index: 1; width: 280px; height: 210px; background-color: #efefef; } .div01 .div02 { position: absolute; right: 0px; top:11px; color: #333; background-color: red; } .div01 .div03 { position:absolute; right: 0px; bottom: 0px; } </style> </head> <body> <div class="div01"> <div class="div02"> <a href="http://blog.csdn.net/">关闭</a> </div> <div class="div03"> <a href="https://www.baidu.com/"><img src="http://img.ads.csdn.net/2017/201704241619521051.jpg"></a> </div> </div> </body> </html> 字体布局 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; } .p1 { width: 200px; height: 100px; background-color: blanchedalmond; position: absolute; margin: 10px auto; /*字体居中,要使用以下两个属性一起使用*/ /*文本对齐居中*/ text-align: center; /*行高要和标签本身的高度一致*/ line-height: 100px; } /*使用嵌套做到文本居于底部*/ div { position: relative; margin:300px auto; width: 200px; height: 100px; background-color: chartreuse; } div .p2 { position:absolute; bottom: 0; left: 50%; transform: translateX(-50%); } </style> </head> <body> <p class="p1">第一个段落</p><br /> <div> <p class="p2">这是第二段</p> </div> </body> </html>
相对定位
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } body, html { width: 100%; height: 100%; } .header { width: 100%; height: 30%; background-color: goldenrod; } .content { /*相对定位,不会破坏标签所在的位置。方便内部标签使用绝对定位,定到具体位置*/ position: relative; width: 100%; height: 60%; background-color: royalblue; } .footer { width: 100%; height: 10%; background-color: greenyellow } .content .left { width: 30%; height: 30%; background-color: black; /*永远相对的是自己最原始的位置*/ position: relative; /*由于本身的左上角(原点)和content的重合。所以以下类似absolute的写法一样可以居中*/ top: 50%; transform: translateY(-50%); /*备注:一定不要使用relative定位置*/ } /*这种写法也可以做到居中。原理:本身的长度的30%,translateY(-50%)上移自己的一半,相当于往上移动15% top=50%-15%=35% * */ /*.content .left { width: 30%; height: 30%; background-color: black; position: relative; top: 35%; }*/ .content .right { width: 30%; height: 30%; background-color: red; position: relative; /*如果,要达到居中。那么左上角的位置相对父布局=50%-自身一半(15%)=35%。 本身左上角的位置是30%。 top=35%-30%=5% * */ top: 5%; /*以下代码为靠右。左移100%,把自身移除界面了。然后使用translateX(-100%),移回本身*/ left: 100%; transform: translateX(-100%); } /*下面这种写法:自身的长度为30%,往回移动自身的长度。相当于,只要左移=100%-30%=70%*/ /*.content .right { width: 30%; height: 30%; background-color: red; position: relative; top: 5%; left: 70%; }*/ </style> </head> <body> <div class="header"> </div> <div class="content"> <div class="left"> </div> <div class="right"> </div> </div> <div class="footer"> </div> </body> </html>第三天20170506
盒模型
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> /** * 盒模型有两种 * 1.content-box(默认的) * 真实宽度=width+padingLeft+padingRight+borderLeft+borderRight;(内边距边框分左右) * 2.border-box * 真实宽度=width;(内边距和 边框,不会增加标签宽度) */ .box01{ width:200px; height:200px; padding:20px; box-sizing: border-box; /*border:30px solid black;*/ background-color: blue;; } .box02{ width: 200px; height:200px; background-color: darkblue;; } </style> </head> <body> <div class="box01"> </div> <div class="box02"> </div> </body> </html>
input标签 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <!-- value:默认的真实值 --> <!-- placeholder:提示语 --> <input type="text" id="" value="" placeholder="手机号/邮箱" /> <input type="password" name="" id="" value="" placeholder="6位密码" /> <input type="checkbox" name="" id="" value="" checked="checked"/> <hr /> <!--radio单选框。必须设置name,并且要保持一致。value值不显示在页面--> <input type="radio" name="radio" id="" value="L" checked="checked"/>篮球 <input type="radio" name="radio" id="" value="Z" />足球 <input type="radio" name="radio" id="" value="P" />排球 <hr /> <input type="button" name="" id="" value="登录" /> <button>登录</button> <input type="color" name="" id="" value="" /> </body> </html> 简单动画 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> div{ width:200px; height:200px; margin: 200px auto; background-color: blue;; /*增加过度*/ /** * 参数1.所有动画都过度 * 参数2.动画持续时间 */ transition: all 2s; transition-delay: 0.5; } /*transform数值基本都是相对自己的*/ .box:hover{ /*平移*/ /*transform: translateX(200px);*/ /*缩放*/ /*transform:scale(2);*/ /*旋转*/ transform: rotate(180deg); /*改变旋转中心*/ /*距离左上角*/ transform-origin: -10% -50%; } .box2:hover{ transform: translateX(100px) translateY(100px) scaleY(2) rotate(360deg); } </style> </head> <body> <!--<div class="box"></div>--> <div class="box2"></div> </body> </html> 实例小项目
准备工作
在网站 http://www.iconfont.cn/home/index 中下载图标并解压
图标的使用方法:参照运行后的demo.html页面
新建web项目
login.html页面
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="css/main.css"/> </head> <body> <div class="box"> <!-- 一般h1在整个页面只出现一次 --> <!-- 空格隔开代表两个class:login和Title --> <h1 class="login Title">登录</h1> <input type="text" id="userName" placeholder="邮箱" /> <input type="password" id="pasword" placeholder="密码" /> <p class="pRegister">还没有账号?点击此处立即 <a href="register.html">注册</a></p> <a href="search.html"><input class="submit" type="submit" value="提交" /></a> </div> </body> </html> register.html页面 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="text/css" href="css/main.css"/> </head> <body> <div class="box"> <!-- 一般h1在整个页面只出现一次 --> <h1 class="register Title">注册</h1> <input type="text" id="userName" placeholder="邮箱" /> <input type="password" id="pasword" placeholder="密码" /> <input type="password" id="pasword" placeholder="确认密码" /> <button class="submit">提交</button> </div> </body> </html> search.html页面 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="text/css" href="css/main.css" /> </head> <body> <div class="box"> <h1 class="search Title">发现</h1> <div class="serchDiv"> <input type="search" id="search" placeholder="请输入昵称" /> <button>搜索</button> </div> <div class="footer"> <a href="http://WWW.baidu.com"> <span class="font"></span> <p>首页</p> </a> <a> <span class="font"></span> <p>发现</p> </a> <a> <span class="font"></span> <p></p> </a> <a> <span class="font"></span> <p>我的</p> </a> <a> <span class="font"></span> <p>退出</p> </a> </div> </div> </body> </html> main.css代码 * { padding: 0; margin: 0; } /* 从demo.html运行后页面的第一步中复制过来的 */ @font-face {font-family: 'iconfont'; src: url('../fonts/iconfont.eot'); /* IE9*/ src: url('../fonts/iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('../fonts/iconfont.woff') format('woff'), /* chrome、firefox */ url('../fonts/iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/ url('../fonts/iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */ } .box { position: relative; width: 400px; height: 500px; border: 1px solid darkgrey; margin: 50px auto; } .Title { background-color: #0dc441; font-size: 27px; color: white; text-align: center; } #userName, #pasword { width: 350px; height: 30px; border: none; border-bottom: 1px solid darkgray; /*选中边框*/ outline: none; margin-top: 20px; font-size: 17px; position: relative; left: 25px; } .pRegister{ margin-left: 25px; margin-top: 20px; } .pRegister a{ color: #0dc441; } .submit{ margin-left: 25px; margin-top: 25px; } .serchDiv{ /*文本相关的标签,只要父布局控制文本居中就可以了*/ text-align: center; } /*应用本地声明的字体*/ .font{ font-family: iconfont; } .footer a{ /*变成一行*/ float:left; width: 20%; text-align: center; /*子元素会继承父元素的字体*/ font-size: 200%; color: #ccc; /*去掉a标签的下划线*/ text-decoration:none; } .footer a p{ font-size: 18px; } .footer{ width: 100%; position: absolute; bottom: 0; border-top: 2px solid #ccc; } .footer a:nth-child(3) span{ font-size: 150%; border: 2px solid #ccc; border-radius: 50%; } /*被点击字体改变颜色*/ .footer a:active{ color: #0DC441; } 运行效果图:
第四天20170507
小项目实战:明星资料卡
目录结构:
运行效果:
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>明星资料卡</title> <link rel="stylesheet" type="text/css" href="css/main.css" /> </head> <body> <div class="box"> <!-- figure:相当于Div,一般适用于图文结合 <figcaption>在figure中只能出现一个 --> <figure class="view1"> <img src="img/1.png" /> <figcaption> <h2>Billboard三首排行第一</h2> <p class="p1">Shake It Off</p> <p class="p2">Black Space</p> <p class="p3">Bad Blood</p> </figcaption> </figure> <figure class="view2"> <img src="img/2.png" /> <figcaption> <h2>Taylor Swift</h2> <p class="p1">Birthday:1989.12.13</p> <p class="p2">Height:180cm</p> <p class="p3">Weight:56kg</p> </figcaption> </figure> <figure class="view3"> <img src="img/3.png" /> <figcaption> <h2>Back To December</h2> <p class="p1">I'm so glad you made time to see me. How's life, tell me how's your family? I haven't seen them in a while. You've been good, busier then ever. We small talk, work and the weather Your guard is up and I know why.</p> </figcaption> </figure> <figure class="view4"> <img src="img/4.png" /> <figcaption> <figcaption> <h2>1989</h2> <div class="rotate"></div> <p class="p1">Taylor Swift《1989》</p> </figcaption> </figcaption> </figure> <figure class="view5"> <img src="img/5.png" /> <figcaption> <h2>Taylor Swift-《22》</h2> <p class="p1">I don't know about you, but I’m feeling 22, Everything will be alright if you keep me next to you, You don't know about me, but I bet you want to, Everything will be alright if we just keep dancing like we're... 22</p> <div class="square"></div> </figcaption> </figure> <figure class="view6"> <img src="img/6.png" /> <figcaption> <h2>Out of the Woods</h2> </figcaption> </figure> <figure class="view7"> <img src="img/7.png" /> <figcaption> <div class="div1"></div> <div class="div2"></div> </figcaption> </figure> <figure class="view8"> <img src="img/8.png" /> <figcaption> <h2>Taylor Swift</h2> <div class="div1"></div> <div class="div2"></div> <div class="div3"></div> <div class="div4"></div> </figcaption> </figure> <figure class="view9"> <img src="img/9.png" /> <figcaption> </figcaption> </figure> </div> </body> </html>
main.css
* { margin: 0; padding: 0; } .box { margin: 50px auto; } figure { width: 33%; max-height: 400px; /*从左往右排成一行。宽度不够的情况就会换行*/ float: left; /*超出 边界的部分隐藏*/ overflow: hidden; position: relative; } h2, p { position: absolute; } .view1 h2 { top: 50px; left: 50px; color: white; transform: translateX(20px); } .view1 .p1 { left: 50px; top: 120px; color: white; background-color: blue; transform: translateY(500px); } .view1 .p2 { left: 50px; top: 170px; color: white; background-color: blue; transform: translateX(400px); } .view1 .p3 { left: 50px; top: 220px; color: white; background-color: blue; transform: translateX(-300px); } figure, h2, p { transition: all 0.5s; } .view1:hover { transform: translateX(50px); } /*hover后面接标签就是指定标签的css,没有就是改变自己的css*/ /*动画的相对位置和相对定位一样,永远都是相对自己 的位置*/ .view1:hover h2 { transform: translateX(0px); } .view1:hover .p1 { transform: translateY(0px); } .view1:hover .p2 { transform: translateX(0px); } .view1:hover .p3 { transform: translateX(0px); } /*======================================*/ .view2 h2 { top: 70px; left: 120px; color: lawngreen; transform: translateY(20px); } .view2 .p1 { left: 70px; top: 120px; background-color: white; transform: translateX(-300px); } .view2 .p2 { left: 70px; top: 170px; background-color: white; transform: translateX(-400px); transition-delay: 0.2s; } .view2 .p3 { left: 70px; top: 220px; background-color: white; transform: translateX(-500px); transition-delay: 0.4s; } .view2:hover { transform: translateX(50px); /*透明度:范围0~1*/ opacity: 0.8; } .view2:hover h2 { transform: translateX(0px); } .view2:hover .p1 { transform: translateY(0px); } .view2:hover .p2 { transform: translateX(0px); /*动画延时*/ } .view2:hover .p3 { transform: translateX(0px); } /*第三个======================================*/ .view3 h2 { top: 100px; left: 100px; transform: translateY(-300px); } .view3 .p1 { left: 50px; top: 170px; transform: translateY(500px); } .view3:hover img { transform: translateY(-20px); /*透明度:范围0~1*/ opacity: 0.8; } .view3:hover h2 { transform: translateX(0px); } .view3:hover .p1 { transform: translateY(0px); } /*第四个======================================*/ .view4 h2 { top: 50px; left: 20px; transform: translateY(20px); opacity: 0; color: white; } .view4 .p1 { bottom: 45px; right: 50px; transform: translateY(20px); /*设置为不可见*/ /*display:none;*/ opacity: 0; } /*div控制的小白块三角*/ .view4 .rotate { position: absolute; top: 100%; left: 30%; background-color: white; width: 450px; height: 200px; /*transform: rotate(-20deg);*/ /*改变旋转的中心点*/ transform-origin: 0 0; transition: all 0.7s } .view4:hover .rotate { transform: rotate(-18deg); } .view4:hover h2 { opacity: 1; transform: translateX(0px); } .view4:hover .p1 { opacity: 1; transform: translateY(0px); } /*第五个======================================*/ .view5 h2 { top: 80px; left: 50px; } .view5 .p1 { width: 330px; top: 150px; left: 50px; } /*白框*/ .view5 .square { position: absolute; top: 60px; left: 45px; width: 340px; height: 250px; border: 2px solid white; transform: translateX(-400px) rotate(-600deg); transition: all 0.5s; transform-origin: 10% 20%; } .view5:hover .square { transform: translateX(0) rotate(0); } /*第六个======================================*/ .view6 h2 { top: 260px; left: 140px; transform: rotate(-750deg) scale(0); transition: all 1s; } .view6:hover h2 { transform: rotate(-30deg) scale(1); } .view6:hover img { transform: scale(1.2); opacity: 0.5; } /*第7个======================================*/ .view7:hover img { transform: scale(0.6); transform-origin: 120px 250px; } .view7 div { position: absolute; transition: all 0.6s; } .view7 .div1 { top: 95px; left: 70px; width: 0px; height: 180px; border-top:3px solid white; border-bottom:3px solid white; opacity: 0; } .view7 .div2 { top: 70px; left: 95px; width: 180px; height: 0px; border-left:3px solid white; border-right:3px solid white; opacity: 0; } .view7:hover .div1{ width: 250px; opacity: 1; } .view7:hover .div2{ height: 250px; opacity: 1; } /*第8个======================================*/ .view8 h2 { top:500px; left:40px; transform-origin: 20% -300%; transition-delay: 0.5s; } .view8 div { position: absolute; transition: all 0.5s; } .view8 .div1 { top: 25%; left: 18%; width: 0px; height: 2px; background-color: white; } .view8 .div2 { top: 18%; left: 30%; width: 2px; height: 0px; background-color: white; } .view8 .div3 { bottom: 25%; left: 18%; width: 0px; height: 2px; background-color: white; } .view8 .div4 { top: 18%; right: 30%; width: 2px; height: 0px; background-color: white; } .view8:hover .div1{ width: 250px; } .view8:hover .div2{ height: 250px; } .view8:hover .div3{ width: 250px; } .view8:hover .div4{ height: 250px; } .view8:hover h2 { top: 200px; left: 245px; transform:rotate(360deg); } /*第9个======================================*/ .view9:hover { transform:rotate(-30deg); }
第五天20170508
简单动画
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> .box { position: absolute; width: 200px; height: 200px; background-color: black; border:9px solid darkgoldenrod; /* 1.自己定义的动画名 2.动画执行时间 3.执行次数(infinite无限执行) */ animation: squar 2s infinite; /*延迟执行*/ animation-delay: 3s; } /*backColor:给这个动画取个名字*/ /*大括号里面写css*/ @keyframes backColor { /*from代表0%*/ from { background-color: red; left: 100px; } /*to代表100%*/ to { background-color: green; left: 400px; } } @keyframes squar { 0% { left: 0px; top: 0px; transform: rotate(300deg) scale(0); } 25% { left: 500px; top: 0px; transform: rotate(-300deg) scale(1); } 50% { left: 500px; top: 500px; transform: rotate(300deg) scale(0); } 75% { left: 0px; top: 500px; transform: rotate(-300deg) scale(0.1); } 100% { left: 0px; top: 0px; } } </style> </head> <body> <div class="box"></div> </body> </html> 动画加载图标小项目
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="css/main.css" /> </head> <body> <div class="boxs"> <!-- 加空格等于设置了两个class --> <div class="box box1"> <div class="container"> <div class="div1"></div> <div class="div2"></div> <div class="div3"></div> <div class="div4"></div> <div class="div5"></div> </div> </div> <div class="box box2"> <div class="container"> <div class="div1"></div> </div> </div> <div class="box box3"> <div class="container"> <div class="div1"></div> <div class="div2"></div> </div> </div> <div class="box box4"> <div class="container"> <div class="div1"></div> <div class="div2"></div> </div> </div> <div class="box box5"> <div class="container"> <div class="div1"></div> <div class="div2"></div> <div class="div3"></div> </div> </div> <div class="box box6"> <div class="container"> </div> </div> </body> </html> main.css * { margin: 0px; padding: 0px; } body { background-color: #333; } .boxs { width: 1100px; margin: 50px auto; } .box { position: relative; width: 300px; height: 300px; background-color: black; float: left; margin: 20px; } .container { position: absolute; width: 120px; height: 90px; top: 50%; left: 50%; transform: translate(-50%, -50%); } .box1 .container div { background-color: #67CF22; height: 90px; width: 20px; float: left; margin-right: 4px; animation: scaleYBar 0.7s infinite; } .box1 .container .div1 { animation-delay: 0.2s; } .box1 .container .div2 { animation-delay: 0.3s; } .box1 .container .div3 { animation-delay: 0.4s; } .box1 .container .div4 { animation-delay: 0.5s; } .box1 .container .div5 { animation-delay: 0.6s; } @keyframes scaleYBar { 0% { transform: scaleY(1); } /*百分比越小相当于提前播放*/ 20% { transform: scaleY(2); background-color: #fff; } 100% { transform: scaleY(1); } } /*=====================*/ /*上面已经把container已经设置居中了*/ .box2 .container { height: 120px; } .box2 .container .div1 { width: 100%; height: 100%; background-color: #67CF22; border-radius: 50%; animation: rotateCircle 1s infinite; } @keyframes rotateCircle { 0% { transform: rotateX(180deg) rotateY(0deg); } 50% { transform: rotateX(180deg) rotateY(180deg); background-color: white; } 100% { transform: rotateX(0deg) rotateY(180deg); } } /*第3个=====================*/ .box3 .container { height: 120px; } .box3 .container div { position: absolute; width: 100%; height: 100%; background-color: #67CF22; border-radius: 50%; animation: scaleCircle 1s infinite; } /** * 强调:分析动画,再怎么复杂,都值优先考虑其中一个div的动态 * 延迟时间必须是整个时间的一半,才刚刚好放一个最大,另一个最小。 */ .box3 .container .div2 { opacity: 0.5; animation-delay: 0.5s; } @keyframes scaleCircle { 0% { transform: scale(0); } 50% { transform: scale(1); } 100% { transform: scale(0); } } /*第4个=====================*/ .box4 .container { height: 120px; } .box4 .container div { position: absolute; width: 50%; height: 50%; background-color: #67CF22; animation: squareMove 2s infinite; } .box4 .container .div2 { animation-delay: 1s; } @keyframes squareMove { 0% { transform: translateX(0px) translateY(0px) scale(1) rotate(0deg); } 25% { transform: translateX(60px) translateY(0px) scale(0.2) rotate(-90deg); } 50% { transform: translateX(60px) translateY(60px) rotate(-180deg); } 75% { transform: translateX(0px) translateY(60px) rotate(-270deg); } 100% { transform: translateX(0px) translateY(0px) rotate(-360deg); } } /*第5个=====================*/ .box5 .container { width: 150px; height: 30px; } .box5 .container div { width: 30px; height: 30px; background-color: #67CF22; margin-left: 15px; border-radius: 50%; float: left; animation: circleMove 1s infinite; } .box5 .container .div1 { animation-delay: 0s; } .box5 .container .div2 { animation-delay: 0.25s; } .box5 .container .div3 { animation-delay: 0.5s; } @keyframes circleMove { 0% { transform: scale(0); } 50% { transform: scale(1); } 100% { transform: scale(0); } } JavaScript输出和方法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> </body> <!-- 一般js文件放到body下面 --> <script type="text/javascript"> //定义一个变量,并且赋值 var a = 1; //1.在控制台上打印 console.log("Hello World"); //2.弹窗 //alert("你好"); //方法 function plus(x, y) { var z = x + y; console.log(z); } plus(3, 4); //带返回值的 function reduce(x, y) { var z = x - y; return z; } var result = reduce(5, 6); console.log("result=" + result); //方法直接赋值给变量(注意:调用必须在赋值之后) var mutip = function(x, y) { var z = x * y; return z; } console.log(mutip(4, 5)); //方法当做参数传 function mix(fn, y) { var z = fn(5, 7) + y; return z; } //alert(mix(reduce, 8)); </script> </html> JavaScript获取标签属性和修改 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #img1{ width: 100px; height: 100px; } </style> </head> <body> <p id="p1">初始文本</p> <p id="p2">初始化文本</p> <p class="p3">第三个</p> <p class="p3">第三个</p> <p class="p3">第三个</p> </body> <script type="text/javascript"> //通过id获取标签文本 var p1 = document.getElementById("p1"); var p2 = document.getElementById("p2"); var text = p1.innerText; console.log(text); //修改文本,会吧引号中的字符串当成纯文本输出; p1.innerText = "修改过了"; //输出会解析文本中的html标签 p2.innerHTML = "<h2 id='h'>你好</h2>"; document.getElementById("h").innerText = "文本被修改" //单个生成标签 //参数是标签名 var imgView = document.createElement("img"); //给img设置图片 imgView.src = "img/2.jpg"; //设置id imgView.id = "img1"; //添加到到p2标签 p2.appendChild(imgView); //class======================================== /** * getElementsByClassName得到的是包含这个class名的所有标签的数组。 * 得到的是p3(三个p3,中间的索引1) */ var p3 = document.getElementsByClassName("p3")[1]; p3.innerText="我在中间"; </script> </html>第六天20170509
js获取并修改标签属性,js监听器
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <input type="text" id="userName" value="用户名" /> <input type="button" id="login" value="提交" /> <input type="button" id="login2" οnclick="clickLog()" value="提交2" /> </body> <script type="text/javascript"> var userName = document.getElementById("userName"); //1.获取输入框中的文本 var text = userName.value; //alert(text); //2.修改文本框里的值 userName.value = "你好"; /** * 设置监听器:所有的标签都可以设置onclick */ var login = document.getElementById("login"); login.onclick = function() { alert(userName.value); } function clickLog() { alert(userName.value); } </script> </html> js修改css属性
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="div1" style="width: 300px; height: 300px; background-color: red;"></div> </body> <script type="text/javascript"> var div1 = document.getElementById("div1"); //style标签的属性 div1.style.width="700px"; /** * css里面带有中划线的样式名,在JavaScript里面变成了驼峰命名 */ div1.style.backgroundColor="#0ff000"; </script> </html>
练习小项目打地鼠
项目目录结构:
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="css/mian.css" /> </head> <body> <marquee hehavior="alternate">打地鼠</marquee> <div class="but"> <button οnclick="begin()">开始</button> <button οnclick="end()">暂停</button> </div> <div class="box"> <div class="mole" οnclick="hitMole(this)"></div> <div class="mole" οnclick="hitMole(this)"></div> <div class="mole" οnclick="hitMole(this)"></div> <div class="mole" οnclick="hitMole(this)"></div> <div class="mole" οnclick="hitMole(this)"></div> <div class="mole" οnclick="hitMole(this)"></div> <div class="mole" οnclick="hitMole(this)"></div> <div class="mole" οnclick="hitMole(this)"></div> <div class="mole" οnclick="hitMole(this)"></div> </div> <p>得分: <span id="score">0</:span></p> </body> <script src="js/main.js" type="text/javascript" charset="utf-8"></script> </html>main.css
marquee{ margin-top:50px; font-weight: 500px; font-size: 50px; /*字体粗细*/ font-weight: 500px; } .box{ width:330px; height: 330px; margin: 100px auto; margin-top:0px; } .box div{ width:100px; height: 100px; background-color: #DEB887; float: left; margin:5px; background: url(../img/bg.jpg); } p{ text-align: center; } .but{ width:190px; heith:40px; margin: 50px auto; } .but button{ width:90px; float: left; } main.js //所有地鼠div var moles = document.getElementsByClassName("mole"); //分数span var scoreSpan = document.getElementById("score"); //记录得分 var score = 0; var lastIndex = 0; function showMole() { /** * Math.random()产生一个随机数范围(0,1); * Math.floor()向下取整 * moles.lenght = 9 表示数组的长度 */ var showIndex = Math.floor(Math.random() * moles.length); //通过索引获得一个div var mole = moles[showIndex]; lastIndex = showIndex; //显示小老鼠 mole.style.backgroundImage = "url(img/mole.gif)"; } //检查是否是小老鼠 function checkMole() { var tag = moles[lastIndex]; //判断是不是小老鼠 //判断这个字符串里面是否含有mole,有的话返回mole的索引一定大于-1 if (tag.style.backgroundImage.indexOf("mole") > -1) { tag.style.backgroundImage = "url(img/bg.jpg)"; } } var randomShowMole=null; var isStart=false; //开始 function begin() { //每次开始之前停止一下之前的游戏。防止多次点击开始 end(); isStart=true; //开始游戏 randomShowMole = setInterval(function() { checkMole(); showMole(); }, 500); } //暂停 function end() { // 取消定时器 clearInterval(randomShowMole); isStart=false; } function hitMole(obj) { if(!isStart){ return; } if (obj.style.backgroundImage.indexOf("mole") > -1) { //得分 score++; //重置背景 obj.style.backgroundImage = "url(img/bg.jpg)"; // checkMole(); // showMole(); } else { score--; } //显示得分 scoreSpan.innerText = score; }运行效果:
第七天20170510
js通过Selector
<!DOCTYPE html>
<html>
<head>
<metacharset="utf-8" />
<title></title>
</head>
<body>
<p class="p1">第一个段落</p>
<p class="p1">第二个段落</p>
<divclass="div1">
<p>第二个段落</p>
<p>第三个段落</p>
</div>
<p id="p1">我是id标记的p</p>
</body>
<scripttype="text/javascript">
//css语法
//永远只会返回匹配的第一个
varp1=document.querySelector(".p1");
p1.innerText="修改第一个";
//修改第二个class为p1的文本
//这个方法,返回匹配的元素,是个数组。
varp2=document.querySelectorAll(".p1")[1];
p2.innerText="修改第二个";
//把“第三个段落”改成“第3个段落”
varp3=document.querySelectorAll(".div1 p")[1];
p3.innerText="第3个段落";
varp4=document.querySelectorAll("#p1")[0];
p4.innerText="这里修改了id标记的p标签";
</script>
</html>
jQuery的基本使用
<!DOCTYPE html>
<html>
<head>
<metacharset="UTF-8">
<title></title>
</head>
<body>
<div class="box">
<divclass="div1">1</div>
<divclass="div1">1</div>
<divclass="div2">2</div>
<divclass="div3">3</div>
<divclass="div4">4</div>
</div>
<buttonid="submit">提交</button>
</body>
<scriptsrc="js/jquery-1.11.0.js" type="text/javascript"charset="utf-8"></script>
<scripttype="text/javascript">
//$就代表jQuery对象
//css语法选择标签:返回的是jQuery对象,不是dom元素,找到的是所有匹配。
$(".box.div1").text("第一个");//相当于js中的innerText
$(".box.div2").html("<h2>第二个</h2>"); //相当于js中的innerHtml
//获得标签上面的文本
var text = $(".box.div1").text();
console.log(text);
//获得第几个dom元素。备注:获得的是纯dom,非jQuery
var div4 = $(".boxdiv").get(3);
div4.innerText = "第四个";
//修改css:语法类似css,属性之间用","分割
var div3 = $(".box.div3").css({
"width":"300px",
"height":"300px",
"background-color":"blue",
"position":"absolute"
});
//设置监听器
$("#submit").click(function(){
alert("点击了我")
});
//动画
/**
* 参数1,动画所要达到的效果;
* 参数2,动画执行时间。
* 参数3,动画执行完成后执行的方法。
*/
$(".box.div3").animate({left:"200px"},1000,function(){
alert("动画完成!");
});
</script>
</html>
第八天20170511
视频音频的插入
<!DOCTYPE html>
<html>
<head>
<metacharset="utf-8" />
<title></title>
</head>
<body>
<!--<audio> 标签是 HTML 5 的新标签-->
<!-- controls显示控制器 autoplay自动播放 loop循环播放-->
<audio src="audio/CaraDillon - Craigie Hill.mp3" controls autoplay loop></audio>
<video id="video"src="video/movie.mp4"></video>
<buttonid="start">开始</button>
<buttonid="pause">暂停</button>
</body>
<scripttype="text/javascript">
var vido =document.getElementById("video");
var start =document.getElementById("start");
var pause =document.getElementById("pause");
start.οnclick=function(){
//如果停止,则播放
if(video.paused){
video.play();
}
}
pause.οnclick=function(){
//如果正在播放,则停止
if(!video.paused){
video.pause();
}
}
</script>
</html>
h5中画布元素使用
<!DOCTYPE html>
<html>
<head>
<metacharset="UTF-8">
<title></title>
</head>
<body>
<!--HTML 5 <canvas> 标签-->
<canvasid="canvas"></canvas>
<img src="img/5.jpg"alt="" id="img" />
<button id="btn">清空</button>
</body>
<scripttype="text/javascript">
//画布
var canvas =document.getElementById("canvas");
canvas.width = 500;
canvas.height = 500;
canvas.style.backgroundColor ="blue";
//获得画笔
var context =canvas.getContext("2d");
//画笔设置颜色
//边框颜色(线条)
context.strokeStyle ="red";
//1.画条线。
//开始路径
context.beginPath()
//设置线的粗细
context.lineWidth = 10;
//第一个点定位
context.moveTo(0, 0);
//第二哥点,划到的点
context.lineTo(100, 100);
context.closePath();
//填充路径
context.stroke();
//2.画矩形
//填充颜色内部
context.fillStyle ="aqua";
context.beginPath();
/**
* 第一,第二个参数:代表左上角
* 第三个参数:宽度
* 第四个参数:高度
*/
context.rect(200, 200, 200, 200);
context.closePath();
//边框
context.stroke();
//填充内部
context.fill();
//3.画三角形
context.beginPath();
context.moveTo(50, 100);
context.lineTo(50, 200);
context.lineTo(100, 150);
context.lineTo(50, 100);
context.closePath();
context.stroke();
context.fill();
//4.画圆
context.beginPath();
/**
* 第一个第二个参数:圆心
* 第三个参数:半径
* 第四个角度:起始
* 第五个结束:结束
*/
context.arc(300, 100, 50, 0, 2 *Math.PI);
context.closePath();
context.stroke();
//5:写文字
//设置字体:此出如果设置一定要带上字体大小和字体。
context.font = "30px 宋体";
context.beginPath();
//第一个参数:文本,第二个,第三个:文本位置
context.fillText("你好!", 300, 450);
context.closePath();
//6:画图片
// var img=new Image();
// img.src="img/5.jpg";
var img =document.getElementById("img");
img.onload = function() {
context.beginPath();
context.drawImage(img,300, 100);
context.closePath();
}
//清空
document.getElementById("btn").οnclick= function() {
//清空某一个区域(图片清理不掉,是因为加载需要时间。需要在图片的onclick中清空)
context.clearRect(0, 0,canvas.width, canvas.height);
}
//延时器
//setTimeout(function(){
//context.clearRect(0,0,canvas.width,canvas.height);
//},1000);
</script>
</html>
画布元素使用小项目
运行结果:
index.html
<!DOCTYPE html>
<html>
<head>
<metacharset="utf-8" />
<title></title>
</head>
<body>
</body>
<script src="js/main.js"type="text/javascript" charset="utf-8"></script>
</html>
main.js
var canvas = document.createElement("canvas"); //添加 document.body.appendChild(canvas); //把整个页面的宽高给canvas canvas.width = window.innerWidth; canvas.height = window.innerHeight; canvas.style.backgroundColor = "black"; //画笔 var context = canvas.getContext("2d"); //定义一个数组 var dots = []; loop(); function loop() { setInterval(function() { context.clearRect(0,0,canvas.width,canvas.height); var dot = new Dot(canvas.width * 0.5, canvas.height * 0.5); //把点添加到数组 dots.push(dot); for (var i = 0; i < dots.length; i++) { dots[i].update(); } }, 50); } //定义一个Dot对象 function Dot(x, y) { //圆心 this.x = x; this.y = y; //偏移 this.cX = Math.floor(Math.random() * 8) - 4; this.cY = -5; //重力因素 this.garvity = 0.1; //半径 this.radius = 5; //定义一个画圆的方法 this.drawArc = function() { //设置随机颜色 context.fillStyle = this.getColor(); context.beginPath(); context.arc(this.x, this.y, this.radius, 0, 2 * Math.PI); context.closePath(); //填充 context.fill(); } //更新圆的位置 this.update = function() { //更新圆心 this.x = this.x + this.cX; this.y = this.y + this.cY; //重力因素,让点下落 this.cY = this.cY + this.garvity; //重新绘制 this.drawArc(); } //产生随机颜色 this.getColor = function() { return "#" + Math.floor(Math.random() * 16777215).toString(16); } }
第九天第十天:自己开发贪吃蛇项目
目录结构:
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>贪吃蛇</title> <link rel="stylesheet" type="text/css" href="css/main.css"/> </head> <body> <audio src="audio/snack.mp3" autoplay loop></audio> <div class="container"> <div class="ground"> </div> <div class="control"> <span class="banner">无限组合</span> <ul class="speed"> <li οnclick="gread1()">一级</li> <li οnclick="gread2()">二级</li> <li οnclick="gread3()">三级</li> <li οnclick="sub_v()">减速</li> <li οnclick="add_v()">加速</li> </ul> 速度:<span class="speed_v"></span> <span class="score"></span> <div class="buttons"> <button id="start">开始/结束</button> <button id="purse">暂停/恢复</button> </div> </div> <div class="intro"> <h4>游戏说明:</h4> <p>上下左右键控制蛇的转向.一级,二级,三级都代表速度,三级速度最高。也可以直接点击加速(add-v,快捷键A)或减速(sub-v,快捷键S).不要撞到仙人掌哦</p> </div> </div> </body> <script src="js/jquery-1.11.0.js" type="text/javascript" charset="utf-8"></script> <script src="js/main.js" type="text/javascript" charset="utf-8"></script> </html> main.css .container { /*避免蛇定位到.ground外边*/ position: relative; width: 1000px; margin: 0 auto; } .ground { positon: relative; width: 100%; height: 500px; background: url(../img/background.jpg) no-repeat; } .control { width: 100%; height: 60px; line-height: 60px; background-color: #cce290; } .banner { float: left; margin-left: 10px; font-size: 18px; } .buttons { float: right; margin-right: 10px; } .speed { float: left; margin: 10px auto; height: 40px; /*去掉无序列表中的格式*/ list-style-type: none; line-height: 40px; text-align: center; } .speed li { background-color: #f6ff9f; float: left; width: 60px; heith: 100%; margin-right: 12px; border-radius: 40%; } .speed li:hover { background-color: yellow; } .speed li:active { background-color: red; } .intro { width: 100%; height: 50px; position: relative; background: url(../img/key.jpg) no-repeat; background-color: #CCE290; } .intro h4 { position: absolute; left: 220px; } .intro p { position: absolute; left: 320px; margin-top: 0px; } .food { position: absolute; background: #8b0 url(../img/body.gif); transform: scale(1.3); } .eagle{ width: 100px; height: 100px; /*属性规定当内容溢出元素框时发生的隐藏事情。*/ overflow: hidden; border:1px dotted red; } .block { width: 20px; height: 20px; /*属性规定当内容溢出元素框时发生的隐藏事情。*/ overflow: hidden; } .snake-block { position: absolute; background: red; } .speed_v { width: 200px; } #h-down, #t-down { transform: rotate(90deg); } #h-up, #t-up { transform: rotate(-90deg); } #h-left, #t-left { transform: rotate(180deg); } main.js //获得贪吃蛇活动范围的div var ground = $(".ground"); //获得计分元素 var aSpan = $(".score"); //定义蛇数组 var snakerAry = []; //声名全局变量存放当前食物 var oFood; //存放障碍物数组.要放到createCactus();前面。先声名后使用 var cactusAry = new Array(); //对吃过的食物计数,初始化为0; var sum = 0; //蛇头移动方向,默认为右 var moveDir = "right"; //存放创建的定时器 var timer; //游戏运行状态标记 var runing = false; //是否点过“开始”按钮标记 var begin = false; //获取开始/结束标签 var oStart = $("#start"); //获取暂停/恢复标签 var oPurse = $("#purse"); //获得显示速度的标签 var speed_v = $(".speed_v"); //定时器设置时间,控制速度 var perTime = 300; //显示速度 speed_v.html(1000 - perTime); //鹰距离左边的距离 var eagleLeft; //鹰距离上边的距离 var eagleTop //创建蛇================================================================================================================================= //i从3开始主要是定位用的 for (var i = 3; i > 0; i--) { //创建div标签 var tempDiv = $("<div/>"); tempDiv.css({ "left": i * 20 + "px", "top": "60px" }); /** * addClass(向被选元素添加一个或多个类名); */ tempDiv.addClass("block snake-block"); if (i == 3) { tempDiv.css({ "background": "url(img/head.png)", //以使背景图像完全覆盖背景区域 "background-size": "cover" }); } else if (i == 2) { tempDiv.css({ "background": "url(img/body.png)", "background-size": "cover" }); } else { tempDiv.css({ "background": "url(img/tail.png)", "background-size": "cover" }); } //获得属性值 //alert(tempDiv.attr("class")); //css() 方法设置或返回被选元素的一个或多个样式属性 //alert(tempDiv.css("left")); snakerAry.push(tempDiv); ground.append(tempDiv); } //生成随机坐标。格式是数字(主要是创建障碍物和食物时用到)====================================================================================================== function divPoint() { var iLeft, iTop; var flag = false; do { /** * 生成随机点距离left和top的距离 * 应为class为ground的div宽1000,高500. * 而每个图片是20*20的 */ iLeft = Math.floor(Math.random() * 50) * 20; iTop = Math.floor(Math.random() * 25) * 20; //判断创建食物的位置是否和蛇身重合 for (var i = 0; i < snakerAry.length; i++) { //css() 方法设置或返回被选元素的一个或多个样式属性。 if (iLeft == parseInt(snakerAry[i].css("left")) && iTop == parseInt(snakerAry[i].css("top"))) { flag = true; break; } } } while (flag) //返回两个参数 return { iLeft: iLeft, iTop: iTop }; } //创建鹰================================================================================================================================ //创建鹰标签 var eagle = $("<div/>"); eagleLeft = Math.floor(Math.random() * 10) * 100; eagleTop = Math.floor(Math.random() * 5) * 100; while (eagleLeft < 100 || eagleTop < 100) { eagleLeft = Math.floor(Math.random() * 10) * 100; eagleTop = Math.floor(Math.random() * 5) * 100; } eagle.css({ "left": eagleLeft + "px", "top": eagleTop + "px", "background": "url(img/eagle.gif)", //以使背景图像完全覆盖背景区域 "background-size": "cover" }); /** * addClass(向被选元素添加一个或多个类名); */ eagle.addClass("eagle snake-block"); ground.append(eagle); //创建障碍物============================================================================================================================== // 先创建障碍物,是因为食物会多次创建,并不能和障碍物重合,所以要先确定障碍物 function createCactus() { for (var i = 0; i < 5; i++) { var cactus = $("<div/>"); //不让左上角周围有障碍物 var Left = divPoint().iLeft; var Top = divPoint().iTop; while (Left < 100 || Top < 100) { Left = divPoint().iLeft; Top = divPoint().iTop; } cactus.css({ "left": Left + "px", "top": Top + "px", "background": "url(img/cactus.png)", "background-size": "cover" }); cactus.addClass("block food"); cactusAry.push(cactus); ground.append(cactus); } } //调用生成障碍物 createCactus(); //判断是否和障碍物重合,Left,Top是数字========================================================================================== function coincide(Left, Top) { var state = false; for (var i = 0; i < cactusAry.length; i++) { if (Left == parseInt(cactusAry[i].css("left")) && Top == parseInt(cactusAry[i].css("top"))) { state = true; break; } } return state; } //创建食物================================================================================================================ function createFood() { oFood = $("<div/>"); var num = Math.floor(Math.random() * 4); //避免在障碍物上创建食物 var Left = divPoint().iLeft; var Top = divPoint().iTop; while (coincide(Left, Top).state) { Left = divPoint().iLeft; Top = divPoint().iTop; } oFood.css({ "left": Left + "px", "top": Top + "px" }); switch (num) { case 0: oFood.css({ "background": "url(img/gold.png)", "background-size": "cover" }); break; case 1: oFood.css({ "background": "url(img/berries.png)", "background-size": "cover" }); break; case 2: oFood.css({ "background": "url(img/peach.png)", "background-size": "cover" }); break; default: oFood.css({ "background": "url(img/apple.png)", "background-size": "cover" }); break; } oFood.addClass("block food"); ground.append(oFood); } createFood(); //食物添加到尾巴的前面后,计算尾巴现在应有的坐标,单位是数字======================================================================== function priTail(headLeft, headTop, tailLeft, tailTop, moveDir) { // 竖方向添加 if (tailLeft == headLeft || moveDir == "right" || moveDir == "left") { if (tailTop > headTop) tailTop -= 20; else if (tailTop < headTop) tailTop += 20; } else if (tailTop == headTop || moveDir == "up" || moveDir == "down") { //横方向添加 if (tailLeft > headLeft) tailLeft -= 20; else if (tailLeft > headLeft) tailLeft += 20; } return { tailTop: tailTop, tailLeft: tailLeft }; } //蛇和鹰移动===================================================================================================================== function move() { //获得蛇头 var snakeHead = snakerAry[0]; //蛇距离左边距离,数字 var headLeft = parseInt(snakeHead.css("left")); //蛇距离顶部距离,数字 var headTop = parseInt(snakeHead.css("top")); /** * 蛇身移动 * 先移动蛇身,因为需要用到蛇头 */ for (var i = snakerAry.length - 1; i > 0; i--) { snakerAry[i].css({ "top": snakerAry[i - 1].css("top"), "left": snakerAry[i - 1].css("left") }); } //蛇头移动 switch (moveDir) { case "left": headLeft -= 20; break; case "right": headLeft += 20; break; case "up": headTop -= 20; break; case "down": headTop += 20; break; } snakerAry[0].css({ "left": headLeft + "px", "top": headTop + "px" }); //当蛇头方向变时旋转蛇头,这里通过改变id。然后通过css旋转的。 snakerAry[0].attr("id", "h-" + moveDir); //与蛇身相撞结束游戏 for (var i = 1; i < snakerAry.length; i++) { if (headLeft == parseInt(snakerAry[i].css("left")) && headTop == parseInt(snakerAry[i].css("top"))) { reStart(); } } /** * 鹰移动,上下左右,或不动 */ var eagleMove = Math.floor(Math.random() * 5); eagleLeft = parseInt(eagle.css("left")); eagleTop = parseInt(eagle.css("top")); //增加和蛇头向心力 if (eagleLeft > headLeft && eagleLeft > 6) { eagleLeft -= 6; } else { if (eagleLeft < headLeft && eagleLeft <= 894) { eagleLeft += 6; } } if (eagleTop > headTop && eagleTop > 4) { eagleTop -= 4; } else { if (eagleTop < headTop && eagleTop <= 396) { eagleTop += 4; } } //随机移动 switch (eagleMove) { case 0: if (eagleTop > 20) { eagleTop -= 20; } break; case 1: if (eagleTop <= 380) { eagleTop += 20; } break; case 2: if (eagleLeft > 20) { eagleLeft -= 20; } break; case 3: if (eagleLeft <= 880) { eagleLeft += 20; } break; default: break; } eagle.css({ "left": eagleLeft + "px", "top": eagleTop + "px" }); //撞墙游戏结束 if (headLeft < 0 || headTop < 0 || headTop >= 500 || headLeft >= 1000) { reStart(); return; } //撞障碍物游戏结束 if (coincide(headLeft, headTop)) { reStart(); return; } //鹰和蛇任何位置相撞,游戏结束 eagleLeft1 = parseInt(eagle.css("left")); eagleTop1 = parseInt(eagle.css("top")); for (var i = 0; i < snakerAry.length; i++) { var sLeft = parseInt(snakerAry[i].css("left")); var sTop = parseInt(snakerAry[i].css("top")); if (sLeft >= eagleLeft1 && sLeft < (eagleLeft1 + 100) && sTop >= eagleTop1 && sTop < (eagleTop1 + 100)) { reStart(); return; } } //获取当前的尾巴方向,调整尾巴的方向 var snakeTail = snakerAry[snakerAry.length - 1]; var tailLeft = parseInt(snakeTail.css("left")); var tailTop = parseInt(snakeTail.css("top")); if (tailTop < parseInt(snakerAry[snakerAry.length - 2].css("top"))) { snakeTail.attr("id", "t-down"); } else if (tailTop > parseInt(snakerAry[snakerAry.length - 2].css("top"))) { snakeTail.attr("id", "t-up"); } if (tailLeft > parseInt(snakerAry[snakerAry.length - 2].css("left"))) { snakeTail.attr("id", "t-left"); } else if (tailLeft < parseInt(snakerAry[snakerAry.length - 2].css("left"))) { snakeTail.attr("id", ""); } //吃到的食物添加到尾巴的前面,分别改变尾巴和食物的定位坐标值 if (headLeft == parseInt(oFood.css("left")) && headTop == parseInt(oFood.css("top"))) { //添加蛇身 tailLeft = parseInt(snakeTail.css("left")); tailTop = parseInt(snakeTail.css("top")); oFood.attr("class", "block snake-block"); oFood.css({ "background": "url(img/body.png)", "top": tailTop + "px", "left": tailLeft + "px" }); sum++; /** * arrayObject.splice(index,howmany,item1,.....,itemX) 参数 描述 index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。 howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。 item1, ..., itemX 可选。向数组添加的新项目。 */ snakerAry.splice(snakerAry.length - 1, 0, oFood); aSpan.html("已吃食物" + sum + "个"); //修改尾巴 tailTop = priTail(headLeft, headTop, tailLeft, tailTop, moveDir).tailTop; tailLeft = priTail(headLeft, headTop, tailLeft, tailTop, moveDir).tailLeft; snakeTail.css({ "left": tailLeft + "px", "top": tailTop + "px" }); //重新生成食物 createFood(); } } //开始(恢复)或结束================================================================================================================== oStart.click(function() { if (!runing) { //打开定时器 openTimer(); begin = true; runing = true; } else { var msg = confirm("结束游戏成绩将清空,确定结束吗!"); if (msg) { clearInterval(timer); //重新加载页面 window.location.reload(); } } }); //暂停和恢复=========================================================================================================================== oPurse.click(function() { if (runing) { clearInterval(timer); runing = false; } else { //只有点过开始的状态,才可以恢复 if (begin) oStart.click(); } }); //定时器============================================================================================================================ function openTimer() { timer = setInterval(function() { //开始移动 move(); }, perTime); } //改变速度=========================================================================================================================== //一级 function gread1() { //经测试这里需要先暂停下定时器 clearInterval(timer); perTime = 300; speed_v.html(1000 - perTime); if (runing) { openTimer(); } } //二级 function gread2() { clearInterval(timer); perTime = 100; speed_v.html(1000 - perTime); if (runing) { openTimer(); } } //三级 function gread3() { clearInterval(timer); perTime = 60; speed_v.html(1000 - perTime); if (runing) { openTimer(); } } //加速 function add_v() { clearInterval(timer); if (perTime > 100) { perTime = perTime - 50; speed_v.html(1000 - perTime); } if (runing) { openTimer(); } } //减速 function sub_v() { clearInterval(timer); if (perTime < 900) { perTime = perTime + 50; speed_v.html(1000 - perTime); } if (runing) { openTimer(); } } //重新开始========================================================================================================================= function reStart() { clearInterval(timer); //confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框 alert("此次游戏失败,要重新开始吗?"); clearInterval(timer); window.location.reload(); } //设置转向和加减速================================================================================================================== $(document).keydown(function(e) { e = e || window.event; var keyCode = e.which || e.keyCode; switch (keyCode) { case 37: if (moveDir != "right") { moveDir = "left"; } break; case 38: if (moveDir != "down") { moveDir = "up"; } break; case 39: if (moveDir != "left") { moveDir = "right"; } break; case 40: if (moveDir != "up") { moveDir = "down"; } break; case 65: //加速 add_v(); break; case 83: //减速 sub_v(); break; } });运行效果: