品优购项目html+css+js

品优购项目html+css+js

跟着pink老师学前端,第一个完成的项目,总共有三个页面,分别是index.html、list.html和detail.html,下面是该项目的一些总结,最后有源码呦

ico图标,显示浏览器中的网页图标

显示浏览器中的网页图标

  1. 获取网页ico图标,在地址后面加/favicon.ico,即可获得
  2. 要在html中加入到head中
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
  1. 制作ico图标,把想要的切成图片,借助网站http://bitbug.net/把图片转化为ico图标
  2. 注意啦,它是图标,不是照片,16、32、48常用,为了兼容性,把图标放在根目录下

字体图标
此次练习,有很多用到字体图标的地方
1.字体图标优点
(1)可以做和图片一样可以做的事情,改变透明度、旋转度…
(2)本质是文字,可以随意改变颜色、产生阴影、透明效果等
(3)体积小,携带的信息并没有削弱
(4)几乎支持所有浏览器、移动端必备的东西
2.下载网站
(1)http://icomoon.io
(2)http://www.iconfont.cn/
3.下载完的字体,要把fonts问价夹放入根目录中
在这里插入图片描述
4.在样式表里声明字体,要注意路径和字体名称

@font-face {
    font-family: 'icomoon';
    src:  url('../fonts/icomoon.eot?7kkyc2');
    src:  url('../fonts/icomoon.eot?7kkyc2#iefix') format('embedded-opentype'),
    url('../fonts/icomoon.ttf?7kkyc2') format('truetype'),
    url('../fonts/icomoon.woff?7kkyc2') format('woff'),
    url('../fonts/icomoon.svg?7kkyc2#icomoon') format('svg');
  font-weight: normal;
  font-style: normal;
}

5.使用例子,打开下载的字体图标文件夹,点开网页,复制相应的字体图标到huml中,然后再css样式表使用

<a href="#">更多</a>
a {
	font-family: 'icomoon';
}

在这里插入图片描述
index部分
1.整体效果展示
index.htmlindex.html
2.轮播图写法
(1)html代码,focus里面装着两个a作为左右按钮,ul里面放置轮播图,ol为相应的小圆圈,注意a的href要设置为javascript:;不能为#,否则轮播图每轮播一次便会打开一个新的页面。

<div class="focus fl">
	<a href="javascript:;" class="arrow_l"> < </a>
	<a href="javascript:;" class="arrow_r"> > </a>
	<ul>
		<li>
			<a href="#"><img src="upload/focus0.jpg"></a>
		</li>
		<li>
			<a href="#"><img src="upload/focus1.jpg"></a>
		</li>
		<li>
			<a href="#"><img src="upload/focus2.jpg"></a>
		</li>
		<li>
			<a href="#"><img src="upload/focus3.jpg"></a>
		</li>
		<li>
			<a href="#"><img src="upload/focus4.jpg"></a>
		</li>
	</ul>
	<ol class="circle">
	</ol>
</div>

(2)css部分,focus设置为相对定位,其余为绝对定位,focus就相当于一个展示框,而ul装着所有要展示的东西,当轮到谁上场时,谁就上台,也就是说focus的宽度决定了展示图片的大小,然后再设置overflow:hidden,就只能展示该展示的。

.focus {
	position: relative;
	height: 455px;
	width: 720px;
	overflow: hidden;
}
.arrow_l,
.arrow_r {
	display: none;
	position: absolute;
	top: 50%;
	margin-top: -20px;
	height: 40px;
	width: 24px;
	line-height: 40px;
	text-align: center;
	/*半透明颜色*/
	background-color: rgba(0, 0, 0, .3);	
	font-family: 'icomoon';
	color: #fff;
	font-size: 18px;
	z-index: 2;
}
.arrow_r {
	right: 0;
}
.focus ul {
	position: absolute;
	top: 0;
	left: 0;
	width: 700%;
}
.focus ul li {
	float: left;
}
.focus ul li img {
	width: 720px;
	height: 455px;
}
.circle {
	position: absolute;
	bottom: 10px;
	left: 50px;
}
.circle li {
	float: left;
	width: 8px;
	height: 8px;
	margin: 0 3px;
	border: 2px solid rgb(255,255,255,0.5);
	border-radius: 50%;
	/*鼠标经过显示小手*/
	cursor: pointer;
}

(3)js部分,index的js,见注释吧,嘻嘻

	//轮播图
    var focus = document.querySelector('.focus');
    // 左右按钮
    var arrow_l = document.querySelector('.arrow_l');
    var arrow_r = document.querySelector('.arrow_r');
   //给focus添加鼠标经过事件,当鼠标经过时,显示左右按钮,并且清除自动播放
    focus.addEventListener('mouseenter', function() {
        arrow_l.style.display = 'block';
        arrow_r.style.display = 'block';
        //清除定时器,取消自动播放
        clearInterval(timer);
        //清空定时器变量
        timer = null;
    });
   //给focus添加鼠标离开事件,当鼠标离开时,隐藏左右按钮,启动自动播放
    focus.addEventListener('mouseleave', function() {
        arrow_l.style.display = 'none';
        arrow_r.style.display = 'none';
        //启动计时器
        timer = setInterval(function() {
            arrow_r.click();
        }, 2000)
    })
    // 自动生成小圆圈
    var ul = focus.querySelector('ul');
    var ol = focus.querySelector('.circle');
    var focusWidth = focus.offsetWidth;
    for(var i = 0; i < ul.children.length; i++) {
        var li = document.createElement('li');
        //添加自定义属性
        li.setAttribute('data-index', i);
        ol.appendChild(li);
//小圆圈点击事件,利用排他思想,使点击的小圆圈添加背景颜色,并让图片移动到相应的位置
        ol.children[i].addEventListener('click', function() {
            for(var i = 0; i < ol.children.length; i++) {
                ol.children[i].className = '';
            }
            this.className = 'current';
            var index = this.getAttribute('data-index');
            //当我们点击小圆圈时,要把索引值给num和circle
            num = circle = index;
            animate(ul, -index * focusWidth);
        })
    }
    ol.children[0].className = 'current';
    //克隆第一张图片到ul后面,来实现无缝轮播
    var first = ul.children[0].cloneNode(true);
    ul.appendChild(first);
    //点击右侧按钮,图片滚动一张
    var num = 0;
    //定义一个变量,用来控制小圆圈
    var circle = 0;
    //定义一个flag,节流阀,使点击图片一张结束才能点击下一张
    var flag = true;
    //右按钮点击事件
    arrow_r.addEventListener('click', function() {
        if(flag) {
            flag = false;
            if(num == ul.children.length - 1) {
                num = 0;
                ul.style.left = 0;
            }
            num++;
            animate(ul, -num * focusWidth, function() {
                flag = true;
            });
            circle++;
            circle = circle == ol.children.length ? 0 : circle;
            currentChange();
        }   
    })
    //左按钮点击事件
    arrow_l.addEventListener('click', function() {
        if(flag) {
            flag = false;
            if(num == 0) {
                num = ul.children.length - 1;
                ul.style.left = -num * focusWidth + 'px';
            }
            num--;
            animate(ul, -num * focusWidth, function() {
                flag = true;
            });
            circle--;
            circle = circle < 0 ? ol.children.length - 1 : circle;
            currentChange();
        }
        
    })
    //控制小圆圈跟随着图片的顺序
    function currentChange() {
        for(var i = 0; i < ol.children.length; i++) {
            ol.children[i].className = '';
        }
        ol.children[circle].className = 'current';
    }
    //自动播放事件
    var timer = setInterval(function() {
        arrow_r.click();
    }, 2000)

(4)animate.js动画函数,轮播图能够动起来全靠它

function animate(obj, target, callback) {
    // 先清除以前的定时器,只保留当前的一个定时器执行
    clearInterval(obj.timer);
    obj.timer = setInterval(function() {
        // 步长值写到定时器的里面
        // 把我们步长值改为整数 不要出现小数的问题
        var step = (target - obj.offsetLeft) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        if(target == obj.offsetLeft) {
             // 停止动画 本质是停止定时器
            clearInterval(obj.timer);
            // 回调函数写到定时器结束里面
            callback && callback();
        }
         // 把每次加1 这个步长值改为一个慢慢变小的值  步长公式:(目标值 - 现在的位置) / 10
        obj.style.left = obj.offsetLeft + step + 'px';
    }, 15)
}

list部分
1.整体效果展示
list.html
list.html
2. 页数输入框,当点击该文本框时,文本框的大小和颜色会有相应的变化,利用focus实现,当获取焦点时,进行改变

.page_skip input{
	width: 46px;
	height: 36px;
	text-align: center;
	border: 1px solid #ccc;
	transition: all 0.3s;
}
.page_skip input:focus{
	width: 88px;
	border: 1px solid skyblue;
}

detail部分

  1. 整体效果展示
    detail.html
    detail.html
  2. 图片放大效果
    图片放大效果
    (1)html代码,一个preview_img里面装着照片,黄色遮挡层mask,大的照片盒子并且装有一张照片
<div class="preview_wrap fl">
	<div class="preview_img">
		<img src="upload/s3.jpg">
		<div class="mask"></div>
		<div class="big">
			<img src="upload/big.jpg" alt="" class="bigImg">
		</div>
	</div>
</div>

(2)css代码,preview_img 相对定位,其他绝对定位,要实现放大的效果,其实是big宽度和高度为500px,然后设置overflow:hidden,它的img的宽度和高度为800px,以此来实现放大的效果

.preview_wrap {
	width: 400px;
	height: 590px;
}
.preview_img {
	position: relative;
	height: 398px;
	width: 398px;
	border: 1px solid #ccc;
}
.mask {
	display: none;
	position: absolute;
	top: 0;
	left: 0;
	width: 300px;
	height: 300px;
	background: #FEDE4F;
    opacity: .5;
}
.big {
	display: none;
	position: absolute;
	top: 0;
	left: 410px;
	width: 500px;
	height: 500px;
	z-index: 999;
	border: 1px solid #ccc;
	overflow: hidden;
}
.big img {
    position: absolute;
    top: 0;
    left: 0;
    width: 800px;
	height: 800px;
}

(3)js代码,依旧看注释啦

 var preview_img = document.querySelector('.preview_img');
    var mask = document.querySelector('.mask');
    var big = document.querySelector('.big');
    //添加鼠标经过事件,显示黄色遮挡层、big盒子
    preview_img.addEventListener('mouseover', function() {
        mask.style.display = 'block';
        big.style.display = 'block';
    })
     //添加鼠标离开事件,隐藏黄色遮挡层、big盒子
    preview_img.addEventListener('mouseout', function() {
        mask.style.display = 'none';
        big.style.display = 'none';
    })
    //添加鼠标经过事件,鼠标移动的时候,让黄色的盒子跟着鼠标来走
    preview_img.addEventListener('mousemove', function(e) {
     // 先计算出鼠标在盒子内的坐标
        var x = e.pageX - this.offsetLeft;
        var y = e.pageY - this.offsetTop;
     // mask 移动的距离
        var maskX = x - mask.offsetWidth / 2;
        var maskY = y - mask.offsetHeight / 2;
     // 遮挡层的最大移动距离
        var maskMax = preview_img.offsetWidth - mask.offsetWidth;
        if (maskX <= 0) {
            maskX = 0;
        } else if (maskX >= maskMax) {
            maskX = maskMax;
        }
        if (maskY <= 0) {
            maskY = 0;
        } else if (maskY >= maskMax) {
            maskY = maskMax;
        }
        mask.style.left = maskX + 'px';
        mask.style.top = maskY + 'px';
// 大图片的移动距离 = 遮挡层移动距离 * 大图片最大移动距离 / 遮挡层的最大移动距离
        var bigImg = document.querySelector('.bigImg');
         // 大图片最大移动距离
        var bigMax = bigImg.offsetWidth - big.offsetWidth;
       	 // 大图片的移动距离 X Y
        var bigX = maskX * bigMax / maskMax;
        var bigY = maskY * bigMax / maskMax;
        bigImg.style.left = -bigX + 'px';
        bigImg.style.top = -bigY + 'px';
    })
  1. tab栏切换
    用js实现,利用了排他思想,先把全部detail_lists的classname改为空,再把当前的classname改为current,把全部的detail_tab_con的display改为none,再把当前的display改为block
    tab栏切换
    (1)html代码
<div class="detail fr">
	<div class="detail_tab_list">
		<ul>
			<li class="current detail_lists">商品介绍</li>
			<li class="detail_lists">规格与包装</li>
			<li class="detail_lists">售后保障</li>
			<li class="detail_lists">商品评价(50000)</li>
			<li class="detail_lists">手机社区</li>
		</ul>
	</div>
	<div class="detail_tab_con" style="display: block;">
		<ul class="item">
			<li> 品牌: Apple</li>
			<li>商品名称:AppleiPhone6s</li>
			<li>商品编号:64767920629</li>
			<li>店铺: 全美优品二手商品专营店</li>
			<li>频 率:以官网信息为准</li>
			<li>商品毛重:20.0kg</li>
			<li>机身内存:64GB</li>
			<li>热门型号:iPhone 6s</li>
			<li>商品标签:全网通</li>
			<li>像素:1000-1600万</li>
			<li>热点:指纹识别,Apple Pay,金属机身,拍照神器</li>
			<li>系统:苹果(IOS)</li>
		</ul>
		<p class="more">查看更多参数</p>
	</div>
	<div class="detail_tab_con">
		<ul class="item">
			<li> 分辨率:1920*1080(FHD)</li>
			<li>后置摄像头:1200万像素</li>
			<li>前置摄像头:500万像素</li>
			<li>核 数:其他</li>
			<li>频 率:以官网信息为准</li>
			<li>品牌: Apple ♥关注</li>
			<li>商品名称:APPLEiPhone 6s Plus</li>
			<li>商品编号:1861098</li>
			<li>商品毛重:0.51kg</li>
			<li>商品产地:中国大陆</li>
			<li>热点:指纹识别,Apple Pay,金属机身,拍照神器</li>
			<li>系统:苹果(IOS)</li>
			<li>像素:1000-1600万</li>
			<li>机身内存:64GB</li>
		</ul>
		<p class="more">查看更多参数</p>
		<img src="upload/det01.jpg">
		<img src="upload/det02.jpg">
		<img src="upload/det03.jpg">
	</div>
	<div class="detail_tab_con">
		<ul class="item">
			<li> 售后保障</li>
			<li>XXXXXXXX</li>
			<li>XXXXX</li>
		</ul>
		<p class="more">查看更多参数</p>
	</div>
	<div class="detail_tab_con">
		<ul class="item">
			<li> 商品评价</li>
			<li>XXXXXXXX</li>
			<li>XXXXX</li>
		</ul>
		<p class="more">查看更多参数</p>
	</div>
	<div class="detail_tab_con">
		<ul class="item">
			<li> 手机社区</li>
			<li>XXXXXXXX</li>
			<li>XXXXX</li>
		</ul>
		<p class="more">查看更多参数</p>
	</div>
</div>

(2)css部分

.detail {
	width: 978px;
	border: 1px solid #ccc;
	margin-bottom: 50px;
}
.detail_tab_list {
	height: 39px;
	background-color: #f1f1f1;
}
.detail_tab_list li {
	float: left;
	height: 39px;
	line-height: 39px;
	padding: 0 20px;
	cursor: pointer;
}
.detail_tab_list li.current {
	background-color: #c81623;
	color: #fff;
}
.detail_tab_con {
	display: none;
}
.item {
	padding: 20px 0 0 20px;
}
.item li {
	height: 22px;
}
.more {
	float: right;
	font-family: 'icomoon';
	font-weight: 700;
}

(3)js部分,index的js

var detail_lists = document.querySelectorAll('.detail_lists');
var detail_cons = document.querySelectorAll('.detail_tab_con');
for(var i = 0; i < detail_lists.length; i++) {
   //给detail_tab_con添加自定义属性
   detail_lists[i].setAttribute('data-index-detail', i);
   detail_lists[i].addEventListener('mouseenter', function() {
       //排他思想,当鼠标经过某个li,全部li背景颜色变为空,div全部隐藏
       for(var i = 0; i < detail_lists.length; i++) {
           detail_lists[i].className = '';
           detail_cons[i].style.display = 'none';
       }
       //改变当前li的背景颜色,并显示对应的div
       this.className = 'current';
       var index = this.getAttribute('data-index-detail');
       detail_cons[index].style.display = 'block';
   })
}

源码:https://github.com/ajagkajfl/pingyougou.git 这里这里

小白前端养成记,如有哪里不足,请多多包含

### 回答1: 根据题目要求,我会用300字来回答html静态网站基于品优购电商购物网站网页设计与实现共计3个页面的细节和流程。 品优购电商购物网站是一个非常流行的电商网站,为了设计和实现该网站的静态页面,我们可以分为三个页面:主页、商品列表页和商品详情页。 在设计主页时,我们需要包含品优购网站的logo、导航栏、搜索栏、轮播图、特色推荐商品等元素。通过HTMLCSS来布局和样式化这些元素,使主页看起来美观且用户友好。另外,我们可以使用JavaScript来实现一些交互功能,如点击导航栏跳转到相应的页面、轮播图自动切换等。 商品列表页是展示不同商品的页面。我们可以使用HTMLCSS来创建一个商品列表的结构,包括商品图片、名称、价格等信息。通过CSS来设置商品列表的样式,使它们形成一整行或一整列排列。最后,我们可以使用JavaScript来实现一些筛选和排序功能,比如根据价格、品牌或其他条件来过滤商品。 商品详情页是展示特定商品详细信息的页面。我们可以使用HTMLCSS来创建一个包含商品名称、价格、描述、图片等信息的结构。通过CSS来优化布局和样式,使商品详情页面看起来更加美观。此外,我们可以使用JavaScript来实现一些交互功能,比如选择商品数量、加入购物车等。 总结起来,在设计和实现这个静态网站的三个页面时,我们需要运用HTMLCSSJavaScript的知识。HTML用于创建页面结构,CSS用于样式化页面,JavaScript用于实现交互功能。通过合理地运用这些技术,我们可以设计出一个美观、易用且功能齐全的品优购电商购物网站的静态网站。 ### 回答2: 品优购电商购物网站的静态网站设计与实现共计3个页面。这三个页面分别是主页、商品列表页和商品详情页。 在主页中,我们需要展示品优购电商购物网站的Logo、导航栏、轮播图和推荐商品等内容。通过HTML代码,我们可以创建一个包含这些元素的页面结构,通过CSS样式,我们可以为这些元素设置适当的样式,如颜色、字体大小和边距等。通过JavaScript,我们可以实现轮播图的自动切换、导航栏的下拉菜单以及推荐商品的动态加载等交互功能。 商品列表页显示了品优购网站的各类商品,并提供筛选和排序功能。通过HTMLCSS,我们可以创建一个商品列表的布局,并为每个商品设置适当的样式,如标题、价格和图片等。通过JavaScript,我们可以实现商品的筛选和排序功能,以及翻页和加载更多商品等交互操作。 商品详情页展示了特定商品的详细信息和购买选项。通过HTMLCSS,我们可以创建一个商品详情页面的布局,并设置适当的样式,如商品标题、图片和描述等。通过JavaScript,我们可以实现商品数量的增减、加入购物车和立即购买等交互功能。 这三个页面的设计和实现基于HTMLCSSJavaScript技术,通过合理的页面结构、样式和交互功能,提供给用户一个良好的购物体验。 ### 回答3: 品优购是一家电商购物网站,它的网页设计与实现共计有三个页面,即首页、商品列表页和商品详情页。这些页面是基于HTMLCSSJavaScript开发的。 1. 首页: 首页是品优购的门面,它需要简洁明了地展示品优购的特色和优势。主要包括顶部导航栏、搜索框、轮播图和商品分类展示。通过HTMLCSS来构建页面的基本结构和样式,并利用JavaScript来实现轮播图的自动切换和商品分类的展开与收起。 2. 商品列表页: 商品列表页用于展示品优购的全部商品,以供用户选择购买。该页面需要有商品的缩略图、名称、价格等基本信息,并且可以根据用户的选择进行排序和筛选。通过HTMLCSS来构建商品列表的布局和样式,并利用JavaScript来实现价格的排序和筛选功能。 3. 商品详情页: 商品详情页用于展示某个具体商品的详细信息和购买选项。该页面需要展示商品的大图、名称、价格、描述等详细信息,并提供购买按钮和数量选择框。通过HTMLCSS来构建商品详情页的布局和样式,并利用JavaScript来实现数量的增减和购买按钮的点击事件处理。 这三个页面的设计与实现需要充分考虑用户体验,确保页面的简洁、清晰和易用。同时,还需要注意网页的响应式设计,使其在不同屏幕尺寸下都能良好展示。使用HTMLCSSJavaScript的组合可以实现丰富的网页交互效果,给用户带来良好的购物体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值