项目的效果图
项目目录
│ index.html
│ server.js
│
├─css
│ main.css
│ reset.css
│
├─images
│ │ adv01.jpg
│ │ adv02.jpg
│ │ banner01.jpg
│ │ banner02.jpg
│ │ banner03.jpg
│ │ banner04.jpg
│ │ banner05.jpg
│ │ banner06.jpg
│ │ icons.png
│ │ logo.png
│ │ slide.jpg
│ │ slide02.jpg
│ │ slide03.jpg
│ │ slide04.jpg
│ │
│ └─goods
│ goods001.jpg
│ goods002.jpg
│ goods003.jpg
│ goods004.jpg
│ goods005.jpg
│ goods006.jpg
│ goods007.jpg
│ goods008.jpg
│ goods009.jpg
│ goods010.jpg
│ goods011.jpg
│ goods012.jpg
│ goods013.jpg
│ goods014.jpg
│ goods015.jpg
│ goods016.jpg
│ goods017.jpg
│ goods018.jpg
│ goods019.jpg
│ goods020.jpg
│ goods021.jpg
│
└─js
date.js
date.json
jquery-1.12.4.js
jquery-1.12.4.min.js
slide.js
项目的准备
- 要有服务器的环境来做ajax
- slide.js:做幻灯片用的
项目代码
css
-
main.css
body{ font-family: "Microsoft Yahei" font-size:14px; } /* 页面顶部的样式 */ .header_con{ /*块标签默认为父级的宽度*/ height:29px; background-color: #f7f7f7; border-bottom: 1px solid #ddd; } /* 内容*/ .header{ width:1200px; height: 29px; margin:0px auto; /*background-color: gold;*/ /*margin:0px auto;*/ } .welcome{ font-size:12px; color:#666; line-height: 29px; } .user_con{ /*background-color: gold;*/ } /*默认将欢迎信息隐藏*/ .user_info{ display: none; font-size:12px; line-height:29px; color: #666; } .user_info em{ color:#f80; } .login_btns li, .user_btns li{ float:left; height: 29px; } .login_btns li a, .login_btns span, .user_btns a, .user_btns span{ display: block; line-height:29px; font-size:12px; color:#666; } .login_btns span, .user_btns span{ color:#cecece; margin:0px 10px; } /*响应事件*/ .login_btns a:hover, .user_btns a:hover{ color:#ff8800; } /* logo 搜索框 购物车 样式 */ .center_con{ width:1200px; height:115px; margin:0px auto; /*background-color: gold;*/ } /* logo */ .logo{ margin:29px 0px 0px 17px; } /*搜索框*/ .search_con{ width:616px; height:38px; /*background-color: gold;*/ margin:34px 0px 0px 124px; border:1px solid #37ab40; background: url(../images/icons.png) 10px 6px no-repeat; } /*input输入框*/ .search_con .input_txt{ margin-left: 36px; width:480px; height: 38px; border:0px; /* 去掉input获取焦点时的框线 */ outline: none; } /*搜索文字*/ .search_con .input_sub{ width:100px; height:38px; background-color:#37ab40; border:0px; /*不要input的边框*/ font-size:14px; color:#fff; cursor:pointer; /*设置鼠标形状*/ outline: none; } .search_con .input_sub:hover{ color:#000; } /*购物车*/ .chart_con{ width:200px; height:40px; /*background-color: green;*/ margin-top:34px; } .chart_link{ width:158px; height:38px; border:1px solid #ddd; background:url(../images/icons.png) 15px -42px #f7f7f7 no-repeat; line-height: 38px; text-indent: 48px; color:#37ab40; } .chart_num{ width:40px; height: 40px; background-color: #f80; text-align: center; line-height: 40px; color:#fff; font:bold 18px/40px "Microsoft Yahei"; } /*主菜单*/ .main_menu_con{ height:40px; border-bottom: 2px solid #39a93e; } /*菜单*/ .center_con02{ width:1200px; height: 40px; /*background-color: gold;*/ margin:0px auto; /*font-size:12px;*/ } .center_con02 ul{ /*帮助去掉首页左边的线*/ float: left; overflow: hidden; } /*商品分类*/ .center_con02 h2{ float:left; width:200px; height: 40px; background-color: #39a93e; text-align: center; font:normal 14px/40px "Microsoft Yahei"; color:#fff; } /*首页 手机生鲜 抽奖*/ .center_con02 li{ height: 40px; float: left; } /*字*/ .center_con02 li a{ display: block; /*支持宽高*/ height:14px; line-height: 14px; padding: 0px 20px; border-left: 1px solid #666; margin-top:13px; color:#666; margin-left: -1px; /*去掉首页左边的线*/ } /* 字的响应事件*/ .center_con02 li a:hover{ color: #f80; } /*主菜单下面的幻灯片和二级菜单和广告*/ .center_con03{ width:1200px; height:270px; /*background-color: gold;*/ margin:0px auto; } /*菜单ul*/ .sub_menu_con{ width:200px; height:270px; /*background-color: green;*/ } /*菜单列表*/ .sub_menu_con li{ width:198px; height:44px; border:1px solid #eeeeee; border-top:0px; background:url(../images/icons.png) 175px -385px no-repeat ; } .sub_menu_con li a{ display: block; height:44px; line-height: 44px; text-indent: 71px; /*font-size: 14px; 可以省略*/ color:#333; background:url(../images/icons.png) 35px -90px no-repeat ; } .sub_menu_con li .icon02{ background-position:35px -136px; } .sub_menu_con li .icon03{ background-position:35px -186px; } .sub_menu_con li .icon04{ background-position:35px -239px; } .sub_menu_con li .icon05{ background-position:35px -288px; } .sub_menu_con li .icon06{ background-position:35px -335px; } .sub_menu_con li a:hover{ color:#f80; } .slide_con{ width:760px; height:270px; /*background-color: pink;*/ position: relative; /* 相对定位*/ overflow: hidden; /*裁切超出的部分*/ } .slide_con .slide_list{ position: absolute; /*绝对定位*/ width:4560px; height:270px; left:0; /*动起来的效果是用程序控制这里的left的值*/ top:0; } .slide_con .slide_list li{ position: absolute; float:left; } /*箭头*/ .prev, .next{ position: absolute; /*绝对定位*/ width: 15px; height: 24px; background:url(../images/icons.png) left -450px no-repeat; left:0; top:123px; cursor:pointer; /*设置鼠标形状 变成手*/ } .prev{ left:11px; } .next{ left:736px; background-position: left -500px; } /*点*/ .points{ /*定位后就没有width=100%的属性了*/ position: absolute; width: 100%; /*background-color: green;*/ height:11px; left:0; bottom:9px; font-size:0; text-align: center; } .points li{ /*行内块有间隙 要用父级font-size来改*/ display: inline-block; width:11px; height:11px; background-color: #9f9f9f; margin:0 5px; border-radius: 50%; /*变圆*/ cursor:pointer; } .points .active{ background-color: #cecece; } .advs{ width:240px; height:270px; background-color: lightgreen; } /* 有的浏览器中图片会出现3px间隔的bug 解决方法: 将img转成block */ .advs img{ display: block; } /*食品展示区*/ /*水果*/ .common_model{ width:1200px; height:337px; margin:20px auto 0; /*background-color: gold;*/ } .common_title_con{ height: 35px; border-bottom: 2px solid #42ad46; /*background-color: green;*/ } .common_title_con h3{ float: left; font:bold 16px/35px "Microsoft Yahei"; color:#37ab40; } .common_title_con ul{ float:left; height:12px; border-left:1px solid #666; margin:12px 0 0 20px; } .common_title_con li{ float:left; line-height: 12px; margin-left: 15px; } .common_title_con li a{ font-size:12px; line-height: 12px; color:#666; } .common_title_con li a:hover{ color:#f80; } .common_title_con .more{ float: right; /*line-height: 35px;*/ font:normal 12px/35px "Microsoft Yahei"; color:#666; } .common_title_con .more:hover{ color:#f80; } /*banner*/ .goods_banner{ width:200px; height:300px; } .goods_list{ width:1000px; height: 300px; } .goods_list li{ width:249px; height: 299px; border-right: 1px solid #ededed; border-bottom: 1px solid #ededed; float:left; } .goods_list li h4{ line-height: 50px; text-align: center; font:normal 14px/50px "Microsoft Yahei"; color:#666; } .goods_list li a{ display: block; width:180px; height: 180px; margin:0 auto 0; } .goods_list li .price{ font:bold 20px/50px "Microsoft Yahei"; color:#c40000; text-align: center; /*height: 50px;*/ margin-top:20px; } /*版权信息*/ .footer{ border-top:2px solid #4ab14e; margin: 30px 0 40px; text-align: center; } .footer ul li{ display: inline; } .footer_link{ margin-top: 38px; } .footer_link a{ color:#4e4e4e; font-size:12px; } .footer_link span{ color:#4e4e4e; font-size:12px; padding:0 10px; } .footer_link a:hover{ color:#f80; } .footer p{ margin-top:14px; font-size: 12px; }
-
reset.css
/* 将有格式的标签清除格式 */ /* 将标签默认的间距设为0 */ body, p, h1, h2, h3, h4, h5, h6, ul, dl, dt,form, input{ margin: 0px; padding: 0px; } /* 清除ul的小圆点 ol也有,如果用就加 */ ul{ list-style: none; } /* 去掉默认的下划线 */ a{ text-decoration: none; } /* 去掉倾斜 */ em{ font-style: normal; } /* 在ie中图片做链接会有一个默认的边框 去掉它 */ img{ border:0px; } /* 去掉默认的大小 -- 让h标签继承body的font-size的设置 */ h1, h2, h3, h4, h5, h6{ font-size:100%; } /* 清除浮动、解决margin-top的塌陷 */ .clearfix:before, .clearfix:after{ content: ""; display: table; } .clearfix:after{ clear:both; } .clearfix{ /* ie的bug*/ zoom:1; } /* 左浮动 */ .fl{ float:left; } /* 右浮动 */ .fr{ float: right; }
js
-
幻灯片代码slide.js
$(function(){ // 获取每个幻灯片的li var $li = $('.slide_list li'); // 幻灯片的个数 var $len = $li.length; // alert($len) // 小圆点列表 var $points_con = $('.points'); // 上一个幻灯片的索引值 -- 要离开 var $prevli = 0; // 这个幻灯片的索引值 -- 要显示 var $nowli = 0; // 向前的按钮 var $prev = $('.prev'); // 向后的按钮 var $next = $('.next'); // 定时器 var timer = null; // 幻灯片整体 + 箭头 var $slide = $(".slide_con"); // 防止用户暴力操作 var ismove = false; // 将小圆点放进去 for (var i=0;i<$len;i++){ var $newli = $('<li>'); if (i==0){ $newli.addClass('active'); } $newli.appendTo($points_con); } // 除了第一个其他的都移动到右边 $li.not(':first').css({"left":760}); // 获取每一个小圆点 var $points = $('.points li'); $points.click(function(){ // 幻灯片的值等于点那个点的值 $nowli = $(this).index(); if ($nowli==$prevli){ // 解决点同一个小圆点的问题 return; } // 小圆点改变 $(this).addClass("active").siblings().removeClass("active"); // 做动画的函数 move(); }); // 点击向前 $prev.click(function(){ // 阻止暴力操作 if (ismove){ return; } ismove = true; $nowli -- ; move(); // 改变小圆点 $points.eq($nowli).addClass("active").siblings().removeClass("active"); }); // 点击向后 $next.click(function(){ // alert(ismove) // 阻止暴力操作 if (ismove){ return; } ismove = true; autoplay(); }); // 幻灯片自动播放 timer = setInterval(function(){ autoplay(); },2000); // 当鼠标放上去的时候停下来 $slide.mouseenter(function(){ clearInterval(timer); }); // 鼠标移开 $slide.mouseleave(function(){ timer = setInterval(autoplay,2000); }); function autoplay(){ $nowli++; move(); // 改变小圆点 $points.eq($nowli).addClass("active").siblings().removeClass("active"); }; function move(){ // console.log($nowli); // 第一章幻灯片往前的时候 if ($nowli<0){ // 当要过来的那个的索引值小于0的时候,要过来的那个索引值改为最大的索引值 $nowli = $len-1; $prevli = 0; // 将要过来的放到左边去然后再从左边变成0 $li.eq($nowli).css({"left":-760}); $li.eq($nowli).animate({"left":0}); // 要走的那个往后走 $li.eq($prevli).animate({"left":760},function(){ ismove = false; }); $prevli=$nowli; return; } // 最后一张幻灯片往后的时候 if ($nowli>$len-1){ $nowli = 0; $prevli = $len-1; // 将要过来的放右边去然后再从右边变成0 $li.eq($nowli).css({"left":760}); $li.eq($nowli).animate({"left":0}); // 要走的那个往前走 $li.eq($prevli).animate({"left":-760},function(){ ismove = false; }); $prevli=$nowli; return; } if ($nowli>$prevli){ // 从小到大点 // 先把这个li 放到右边 $li.eq($nowli).css({"left":760}); // 将要走的那张移动到左边 $li.eq($prevli).animate({"left":-760}); // alert($prevli); // 替换走的那张li $prevli=$nowli; }else{ // 点的点小于的时候 从左边过来 先要放到左边去 $li.eq($nowli).css({"left":-760}); $li.eq($prevli).animate({"left":760}); } // 显示的li从 760位置一定到 0 $li.eq($nowli).animate({"left":0},function(){ ismove = false; }); $prevli=$nowli; } });
html
-
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>天天生鲜-首页</title> <!-- 先引入重置的 再引入main --> <link rel="stylesheet" href="css/reset.css" /> <link rel="stylesheet" type="text/css" href="css/main.css"> <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script> <script type="text/javascript" src="js/slide.js"></script> <script type="text/javascript"> $(function(){ $.ajax({ url:"js/date.json", type:"get", dataType:"json" }).done(function(dat){ // 获取成功 // alert(dat.name); $('.login_btns').hide(); // 登录藏起来 $('.user_info em').html(dat.name); $('.user_info').show(); // 登录信息显示 }).fail(function(){ // 获取失败 alert("服务器超时"); }); }); </script> </head> <body> <!-- 页面顶部 --> <div class="header_con"> <div class="header"> <!-- 左边标题 --> <div class="welcome fl">欢迎你来到天天生鲜!</div> <!-- 登录状态 --> <div class="user_con fr"> <!-- ul 没有这个为登录之前的style="display: none" 后面用程序来控制 --> <ul class="login_btns fl"> <li><a href="#">登录</a></li> <li><span>|</span></li> <li><a href="#">注册</a></li> </ul> <!-- div 没有这个为登录之前的style="display: block" --> <div class="user_info fl "> 欢迎您:<em>Sugar</em> </div> <ul class="user_btns fl"> <li><span>|</span></li> <li><a href="#">我的购物车</a></li> <li><span>|</span></li> <li><a href="#">我的订单</a></li> </ul> </div> </div> </div> <!-- logo 搜索框 购物车 --> <div class="center_con"> <!-- logo --> <a href="index.html" class="logo fl"> <img src="images/logo.png" alt="天天生鲜网站logo"> </a> <!-- 输入框 --> <div class="search_con fl"> <form> <input type="text" name="" class="input_txt fl" placeholder="搜索"> <input type="submit" name="" class="input_sub fl" value="搜索"> </form> </div> <!-- 购物车 --> <div class="chart_con fr"> <a href="#" class="chart_link fl">我的购物车</a> <div class="chart_num fl">5</div> </div> </div> <!-- 主菜单 --> <div class="main_menu_con"> <div class="center_con02"> <h2>全部商品分类</h2> <ul> <li><a href="#">首页</a></li> <li><a href="#">手机生鲜</a></li> <li><a href="#">抽奖</a></li> </ul> </div> </div> <!-- 主菜单下面的幻灯片和二级菜单和广告 --> <div class="center_con03"> <!-- 二级菜单 --> <ul class="sub_menu_con fl"> <li><a href="#">新鲜水果</a></li> <li><a href="#" class="icon02">海鲜水产</a></li> <li><a href="#" class="icon03">猪牛羊肉</a></li> <li><a href="#" class="icon04">禽类蛋品</a></li> <li><a href="#" class="icon05">新鲜蔬菜</a></li> <li><a href="#" class="icon06">速冻食品</a></li> </ul> <!-- 幻灯片 用定位做 动起来的效果是用程序控制定位中left的值 --> <div class="slide_con fl"> <!-- 图片 --> <ul class="slide_list"> <li><a href="#"><img src="images/slide.jpg" alt="幻灯片" /></a></li> <li><a href="#"><img src="images/slide02.jpg" alt="幻灯片" /></a></li> <li><a href="#"><img src="images/slide03.jpg" alt="幻灯片" /></a></li> <li><a href="#"><img src="images/slide04.jpg" alt="幻灯片" /></a></li> </ul> <!-- 图片箭头 --> <div class="prev"></div> <div class="next"></div> <!-- 点 宽度等于父级,然后整体居中--> <ul class="points"> <!-- <li class="active"></li> <li></li> <li></li> <li></li> --> </ul> </div> <!-- 广告 --> <!-- 有的浏览器中图片会出现3px间隔的bug 解决方法: 将img转成block --> <div class="advs fl"> <a href="#"><img src="images/adv01.jpg" alt="广告图片"></a> <a href="#"><img src="images/adv02.jpg" alt="广告图片"></a> </div> </div> <!-- 食品展示区 --> <!-- 水果 --> <div class="common_model"> <!-- 食品标题 --> <div class="common_title_con"> <h3>新鲜水果</h3> <ul> <li><a href="#">鲜芒</a></li> <li><a href="#">加州提子</a></li> <li><a href="#">亚马逊牛油果</a></li> </ul> <a href="#" class="more">查看更多></a> </div> <!-- 食品图片 --> <div class="goods_banner fl"> <a href="#"><img src="images/banner01.jpg" alt="banner"></a> </div> <!-- 商品列表 --> <ul class="goods_list fl"> <li> <h4>草莓</h4> <a href="#"><img src="images/goods/goods003.jpg" alt="草莓"></a> <div class="price">¥ 38.00</div> </li> <li> <h4>葡萄</h4> <a href="#"><img src="images/goods/goods002.jpg" alt="葡萄"></a> <div class="price">¥ 5.50</div> </li> <li> <h4>柠檬</h4> <a href="#"><img src="images/goods/goods001.jpg" alt="柠檬"></a> <div class="price">¥ 3.90</div> </li> <li> <h4>奇异果</h4> <a href="#"><img src="images/goods/goods012.jpg" alt="奇异果"></a> <div class="price">¥ 28.5</div> </li> </ul> </div> <!-- 食品展示区 --> <!-- 海鲜 --> <div class="common_model"> <!-- 食品标题 --> <div class="common_title_con"> <h3>海鲜水产</h3> <ul> <li><a href="#">河虾</a></li> <li><a href="#">扇贝</a></li> </ul> <a href="#" class="more">查看更多></a> </div> <!-- 食品图片 --> <div class="goods_banner fl"> <a href="#"><img src="images/banner02.jpg" alt="banner"></a> </div> <!-- 商品列表 --> <ul class="goods_list fl"> <li> <h4>青岛生海捕大青虾</h4> <a href="#"><img src="images/goods/goods018.jpg" alt="青岛生海捕大青虾"></a> <div class="price">¥ 48.00</div> </li> <li> <h4>扇贝</h4> <a href="#"><img src="images/goods/goods019.jpg" alt="扇贝"></a> <div class="price">¥ 46.00</div> </li> <li> <h4>冷冻秋刀鱼</h4> <a href="#"><img src="images/goods/goods020.jpg" alt="冷冻秋刀鱼"></a> <div class="price">¥ 19.00</div> </li> <li> <h4>基围虾</h4> <a href="#"><img src="images/goods/goods021.jpg" alt="基围虾"></a> <div class="price">¥ 25.00</div> </li> </ul> </div> <!-- 版权信息 --> <div class="footer"> <ul class="footer_link"> <li><a href="#">关于我们</a></li> <li><span>|</span></li> <li><a href="#">联系我们</a></li> <li><span>|</span></li> <li><a href="#">招聘人才</a></li> <li><span>|</span></li> <li><a href="#">友情链接</a></li> </ul> <p>CopyRight@ 2020 石家庄天天生鲜信息技术优先公司 All Rights Reserverd</p> <p>电话: 0311-*****666 冀ICP备********6号</p> </div> </body> </html>
json数据
- data.json
{ "name":"sugar", "age":16 }
js 服务器
- server.js
// 引入相应模块 var http = require('http'), url = require('url'), path = require('path'), fs = require('fs'); var port = process.argv[2] || 8888; var types = { 'mp3': 'audio/mpeg', 'html': 'text/html', 'css': 'text/css', 'js': 'application/javascript' }, site = 'http://localhost:' + port; http.createServer(function (request, response) { var uri = url.parse(request.url).pathname, filename = path.join(__dirname, decodeURI(uri)); fs.exists(filename, function (exists) { if (!exists) { response.writeHead(404, {'Content-Type': 'text/plain', 'X-my-param':'zcyue'}); response.write('404 Not Found\n'); response.end(); return; } if(!fs.lstatSync(filename).isDirectory()) { var type = filename.split('.'); type = type[type.length - 1]; response.writeHead(200, { 'Content-Type': types[type] + '; charset=utf-8' }); fs.createReadStream(filename).pipe(response); } else { response.writeHead(301, {'Location': site + '/index.html' }); response.end(); } }); }).listen(parseInt(port, 10)); console.log('Static file server running at\n => ' + site + '/\nCTRL + C to shutdown');
注意事项
- js和css的引入顺序是有区别的
- 要在服务器启动后运行
- node server.js 启动服务器