m.jd.com 京东移动端练习 包含自适应 轮播图

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=0">
    <title>京东移动站-首页</title>
    <link rel="stylesheet" href="css/base.css">
    <link rel="stylesheet" href="css/index.css">
</head>
<body>
<!--版心-->
<!--
1.最大宽度设置成了640px
2.设计稿psd的尺寸就是640px
3.目的:当设备的尺寸比设计稿不至于失真
4.640px的尺寸设计稿的原因:根据当前主要流行的设备尺寸有关系iphone4,4s 尺寸320px
5.750px的设计稿:参考原型iphone6 尺寸375px
6.最小宽度320px  保证最小的宽度320px不让页面错乱
-->
<!--指定了最大和最小宽度-->
<div class="jd_container">
    <!--顶部搜索-->
    <!--没指定最大和最小宽度-->
    <header class="jd_search">
        <!--指定了最大和最小宽度-->
        <div class="jd_search_box">
            <a href="#" class="icon_logo"></a>
            <form action="#">
                <span class="icon_search"></span>
                <input type="search" placeholder="占位符">
            </form>
            <a href="#" class="login">登录</a>
        </div>
    </header>
    <!--轮播图-->
    <div class="jd_banner">
        <ul class="clearFix">
            <li><a href=""><img src="images/l8.jpg" alt=""></a></li>
            <li><a href=""><img src="images/l1.jpg" alt=""></a></li>
            <li><a href=""><img src="images/l2.jpg" alt=""></a></li>
            <li><a href=""><img src="images/l3.jpg" alt=""></a></li>
            <li><a href=""><img src="images/l4.jpg" alt=""></a></li>
            <li><a href=""><img src="images/l5.jpg" alt=""></a></li>
            <li><a href=""><img src="images/l6.jpg" alt=""></a></li>
            <li><a href=""><img src="images/l7.jpg" alt=""></a></li>
            <li><a href=""><img src="images/l8.jpg" alt=""></a></li>
            <li><a href=""><img src="images/l1.jpg" alt=""></a></li>
        </ul>
        <ul>
            <li class="now"></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    <!--导航栏-->
    <nav class="jd_nav">
        <!--不清浮动不占位,背景色设置不上去-->
        <ul class="clearFix">
            <li><a href=""><img src="images/nav0.png" alt=""><p>分类</p></a></li>
            <li><a href=""><img src="images/nav1.png" alt=""><p>分类</p></a></li>
            <li><a href=""><img src="images/nav2.png" alt=""><p>分类</p></a></li>
            <li><a href=""><img src="images/nav3.png" alt=""><p>分类</p></a></li>
            <li><a href=""><img src="images/nav4.png" alt=""><p>分类</p></a></li>
            <li><a href=""><img src="images/nav5.png" alt=""><p>分类</p></a></li>
            <li><a href=""><img src="images/nav6.png" alt=""><p>分类</p></a></li>
            <li><a href=""><img src="images/nav7.png" alt=""><p>分类</p></a></li>
        </ul>
    </nav>
    <!--产品区块-->
    <div class="jd_product">
        <section class="jd_product_box sk">
            <div class="tit nb">
                <div class="f_left">
                    <span class="icon"></span>
                    <span class="name">掌上秒杀</span>
                    <div class="time">
                        <span>0</span>
                        <span>0</span>
                        <span>:</span>
                        <span>0</span>
                        <span>0</span>
                        <span>:</span>
                        <span>0</span>
                        <span>0</span>
                    </div>
                </div>
                <div class="f_right"><a class="mr10" href="#">更多&gt;</a></div>
            </div>
            <div class="con">
                <ul class="pro clearFix">
                    <li>
                        <a href="#"><img src="images/detail01.jpg"></a>
                        <p class="nowPrice">&yen;10:00</p>
                        <p class="oldPrice">&yen;100:00</p>
                    </li>
                    <li>
                        <a href="#"><img src="images/detail02.jpg"></a>
                        <p class="nowPrice">&yen;10:00</p>
                        <p class="oldPrice">&yen;100:00</p>
                    </li>
                    <li>
                        <a href="#" class="nb"><img src="images/detail01.jpg"></a>
                        <p class="nowPrice">&yen;10:00</p>
                        <p class="oldPrice">&yen;100:00</p>
                    </li>
                </ul>
            </div>
        </section>
        <section class="jd_product_box">
            <div class="tit"><h3>京东超市</h3></div>
            <div class="con clearFix">
                <a class="w_50p f_left br" href="#"><img src="images/cp1.jpg" alt=""></a>
                <a class="w_50p f_right bb" href="#"><img src="images/cp2.jpg" alt=""></a>
                <a class="w_50p f_right" href="#"><img src="images/cp3.jpg" alt=""></a>
            </div>
        </section>
        <section class="jd_product_box">
            <div class="tit"><h3>京东超市</h3></div>
            <div class="con clearFix">
                <a class="w_50p f_right bl" href="#"><img src="images/cp4.jpg" alt=""></a>
                <a class="w_50p f_left bb" href="#"><img src="images/cp5.jpg" alt=""></a>
                <a class="w_50p f_left" href="#"><img src="images/cp6.jpg" alt=""></a>
            </div>
        </section>
        <section class="jd_product_box">
            <div class="tit "><h3>京东超市</h3></div>
            <div class="con clearFix">
                <a class="w_50p f_right bl" href="#"><img src="images/cp1.jpg" alt=""></a>
                <a class="w_50p f_left bb" href="#"><img src="images/cp2.jpg" alt=""></a>
                <a class="w_50p f_left" href="#"><img src="images/cp3.jpg" alt=""></a>
            </div>
        </section>
    </div>
</div>

<script src="js/base.js"></script>
<script src="js/index.js"></script>
</body>
</html>

index.css

body {
    background-color: #f5f5f5;
}
/*版心*/
.jd_container {
    min-width: 320px;
    max-width: 640px;
    width: 100%;
    margin: 0 auto;
}
/*顶部搜索*/
.jd_search {
    width: 100%;
    height: 40px;
    position: fixed;
    left: 0;
    top: 0;
    /*background-color: purple;*/
    z-index: 1000;
}
.jd_search .jd_search_box {
    min-width: 320px;
    max-width: 640px;
    width: 100%;
    margin: 0 auto;
    height: 40px;
    background: rgba(201,21,35,0);
    position: relative;
}
.jd_search .jd_search_box .icon_logo {
    position: absolute;
    left: 10px;
    top: 4px;
    width: 70px;
    height: 36px;
    background-position: 0 -103px ;
}
.jd_search .jd_search_box .login {
    position: absolute;
    right: 0;
    top: 0;
    width: 50px;
    height: 40px;
    line-height: 40px;
    text-align: center;
    color: #ccc;
}
/*百分比的宽度是基于父容器内容的宽度*/
.jd_search .jd_search_box form {
    width: 100%;
    padding-left: 70px;
    padding-right: 50px;
    position: relative;
}
.jd_search .jd_search_box form .icon_search{
    position: absolute;
    width: 20px;
    height: 20px;
    left: 80px;
    top: 10px;
    /*后面指定精灵图的长和宽,压缩之后的长宽,前面是压缩之后图片左上角的位置*/
    background-position:-60px -109px ;

}
.jd_search .jd_search_box form input{
    width: 100%;
    height: 30px;
    margin-top: 5px;
    color: #ccc;
    border-radius: 15px;
    padding-left: 30px;
}
/*轮播图*/
.jd_banner {
    width: 100%;
    overflow: hidden;
    position: relative;
}
.jd_banner ul:first-child {
    /*这个ul里要放十张图片*/
    width: 1000%;
    transform: translateX(-10%);
    -webkit-transform: translateX(-10%);
}
.jd_banner ul:first-child li{
    /*每张图片的宽的是它的父亲的10%*/
    width: 10%;
    float: left;
}
.jd_banner ul:first-child li a{
    /*每个a占满li*/
    width: 100%;
    display: block;
}
.jd_banner ul:first-child li a img{
    width: 100%;
    display: block;
}
.jd_banner ul:last-child {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 6px;
    width: 118px;
    height: 6px;
}
.jd_banner ul:last-child li{
    width: 6px;
    height: 6px;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    border: 1px solid #fff;
    border-radius: 3px;
    margin-left: 10px;
    float: left;
}
.jd_banner ul:last-child li:first-child {
    margin-left:0;
}
.jd_banner ul:last-child li.now{
    background: #fff;
}
.jd_nav {
    width: 100%;
    background-color: #fff;
    border-bottom: 1px solid #ccc;
}
.jd_nav ul{
    width: 100%;
    padding-top: 10px;
    padding-bottom: 10px;
}
.jd_nav ul li{
    width: 25%;
    float: left;
}
.jd_nav ul li a{
    display: block;
    width: 100%;
}
.jd_nav ul li a img{
    width: 40px;
    height: 40px;
    margin: 0 auto;
    /*用margin的必须是块元素*/
    display: block;
}
.jd_nav ul li a p{
    text-align: center;
    color: #666;
    font-size: 12px;
    padding: 5px;
}
/*产品区块*/
.jd_product {
    padding: 0 5px;
}
.jd_product_box {
    margin-top: 10px;
    box-shadow: 0 0 2px #ccc;
    /*min-height: 200px;*/
    background-color: #fff;
}
.jd_product_box .tit {
    height: 34px;
    line-height: 34px;
    border-bottom: 1px solid #ddd;
}
.jd_product_box .tit.nb {
    border-bottom: none;
}
.jd_product_box .tit h3 {
    font-weight: normal;
    position: relative;
    padding-left: 23px;
}
.jd_product_box .tit h3::before {
    content:"";
    height: 12px;
    width: 3px;
    background-color: #d8505c;
    /*伪元素是行内元素,不能指定长宽*/
    position: absolute;
    left: 10px;
    top: 11px;
}
/*秒杀*/
.sk .icon {
    width: 16px;
    height: 20px;
    float: left;
    margin-left:10px;
    margin-top: 7px;
    background: url("../images/seckill-icon.png") no-repeat center/16px 20px;
}
.sk .name {
    float: left;
    margin-left:10px;
    font-size: 16px;
    color: #d8505c;
}
.sk .time {
    float: left;
    margin-left:10px;
}
.sk .time span {
    float: left;
    width: 16px;
    height: 16px;
    line-height:16px;
    text-align: center;
    color: #fff;
    background-color: #333;
    margin-left: 3px;
    margin-top: 9px;
}
.sk .time span:nth-child(3),
.sk .time span:nth-child(6) {
    background-color: #fff;
    color: #333;
    width: 3px;
}
.sk .pro {
    width: 100%;
    padding: 10px 0;
}
.sk .pro li{
    width: 33.33%;
    float: left;
}
.sk .pro li a{
    display: block;
    border-right: 1px solid #ddd;
}
.sk .pro li a.nb {
    border-right: none;
}
.sk .pro li a img{
    display: block;
    margin: 0 auto;
    /*图片的长度会根据宽度自动缩放*/
    width: 64%;
}
.sk .pro li p{
    text-align: center;
    font-size: 12px;
    padding: 5px 0;
}
.sk .pro li .nowPrice{
    color: #d8505c;
}
.sk .pro li .oldPrice{
    color: #666;
    /*中间加条线*/
    text-decoration: line-through;
}
/*组合样式的使用*/
.w_50p {
    width: 50%;
    /*display: block;*/
}
.w_50p img {
    display: block;
    width: 100%;
}
.bl {
    border-left: 1px solid #ddd;
}
.br {
    border-right: 1px solid #ddd;
}
.bb {
    border-bottom: 1px solid #ddd;
}

base.css

/*reset  css*/
*,
*::after,
*::before {
    margin: 0;
    padding: 0;
    /*移动端宽度不固定,盒子的总宽度要包括边框*/
    box-sizing: border-box;
    -webkit-border-sizing: border-box;
    /*去掉点击时高亮效果*/
    tap-highlight-color: transparent;
    -webkit-tap-highlight-color: transparent;
}

body {
    font-family: "Microsoft YaHei",sans-serif;
    font-size: 14px;
    color: #333;

}
ul,ol {
    list-style: none;
}
a {
    text-decoration: none;
    color: #333;
}
input,textarea {
    /*点击时去掉边框显蓝色*/
    outline: none;
    /*去掉边框,自己定义边框*/
    border: none;
    /*防止拉大*/
    resize: none;
    /*元素的外观,none没有任何样式*/
    -webkit-appearance: none;
}
/*common css*/
.f_left {
    float: left;
}
.f_right {
    float: right;
}
/*清除浮动*/
.clearFix::after,
.clearFix::before {
    content: "";
    display: block;
    visibility: hidden;
    line-height: 0;
    height: 0;
    clear: both;
}
.ml10 {
    margin-left: 10px;
}
.mr10 {
    margin-right: 10px;
}
.mt10 {
    margin-top: 10px;
}
.mc10 {
    margin-bottom: 10px;
}
/*使用精灵图的公用样式*/
[class^="icon_"],[class*="icon_"] {
    background-repeat: no-repeat;
    background-image: url("../images/sprites.png");
    -webkit-background-size: 200px 200px;
    background-size: 200px 200px;
}

index.js

window.onload = function () {
    search();
    banner();
    drawTime();
};
var search = function () {
    // 默认顶部透明背景
    // 当卷到一定程度透明度不再变
    var searchBox = document.querySelector(".jd_search_box");
    var banner = document.querySelector(".jd_banner");
    var height = banner.offsetHeight;
    //监听页面滚动事件
    window.onscroll = function () {
        //获取向上卷曲的距离
        //var scrollTop=document.documentElement.scrollTop;
        //var scrollTop=document.body.scrollTop;
        var scrollTop = window.pageYOffset;
        // console.log(scrollTop);
        //随着向上卷曲顶部透明度在变
        var opacity = 0;
        if (scrollTop < height) {
            opacity = scrollTop / height * 0.85;
        } else {
            opacity = 0.85;
        }
        searchBox.style.background = "rgba(201,21,35," + opacity + ")";
    };
};
var banner = function () {
    var banner = document.querySelector(".jd_banner");
    var width = banner.offsetWidth;
    var imageBox = banner.querySelector("ul:first-child");
    var pointBox = banner.querySelector("ul:last-child");
    var point = pointBox.querySelectorAll("li");

    var addTransition = function () {
        imageBox.style.transition = "all,0.5s";
        //兼容性要调
        imageBox.style.webkitTransition = "all,0.5s";
    };
    var setTransform = function (distance) {
        imageBox.style.transform = "translateX(" + distance + "px)";
        imageBox.style.webkitTransform = "translateX(" + distance + "px)";
    };
    var removeTransition = function () {
        imageBox.style.transition = "none";
        imageBox.style.webkitTransition = "none";
    };
    // 图片是从第一张开始滚动的,第零张是第八张
    var index = 1;
    var timer = setInterval(function () {
        index++;
        //做过渡
        addTransition();
        //做位移
        setTransform(-index * width);
    }, 2000);
    //监听每执行一次动画后index的值
    document.addEventListener("transitionend", function () {
        //当最后一张播完后
        if (index >= 9) {
            //移到第一张播
            index = 1;
            //去掉过渡,这样图片会瞬间移到指定位置
            removeTransition();
            //做位移
            setTransform(-index * width);
        }
        //当用户自己滑动,最左面那个划过之后
        if (index <= 0) {
            index = 8;
            //去掉过渡
            removeTransition();
            //做位移
            //做位移,去掉过渡后会瞬间移动到这个位置
            setTransform(-index * width);
        }
        //此时index的范围是1-8
        //根据索引设置点
        //点的索引是index-1
        setPoint();
    });
    var setPoint = function () {
        for (var i = 0; i < point.length; i++) {
            var obj = point[i];
            obj.classList.remove("now");
        }
        point[index - 1].classList.add("now");
    };
    var startX=0;
    var distance=0;
    var isMove=false;
    //触摸事件:
    imageBox.addEventListener("touchstart",function(e){
        startX=e.touches[0].clientX;
        clearInterval(timer);
    });
    imageBox.addEventListener("touchmove",function(e){
        //判断一下手放上去到底移动没
        isMove=true;
        var moveX=e.touches[0].clientX;
        distance=moveX-startX;
        var translateX=distance-index*width;
        //当手指放上去之后要把原来的过渡去掉,不认会延迟0.2秒
        removeTransition();
        setTransform(translateX);
    });
    imageBox.addEventListener("touchend",function(e){
        if(isMove){
            if(Math.abs(distance)<width/3){
                //移动的太少返回刚才的位置
                //返回时要过渡返回
                addTransition();
                setTransform(-index*width);
            }else{
                //判断该往左移还是往右移
                if(distance>0){
                    //右移
                    index--;
                    addTransition();
                    setTransform(-index*width);
                }else{
                    // 左移
                    index++;
                    addTransition();
                    setTransform(-index*width);
                }
            }
        }
        //重置一下参数
        startX=0;
        distance=0;
        clearInterval(timer);
        timer=setInterval(function () {
            index++;
            //做过渡
            addTransition();
            //做位移
            setTransform(-index * width);
        }, 2000);
    });

};
var drawTime = function () {
    var time=2*60*60;
    var spans=document.querySelector(".time").querySelectorAll("span");
    var timer=setInterval(function(){
        time--;
        var h=Math.floor(time/3600);
        var min=Math.floor(time%3600/60);
        var s=time%60;
        spans[0].innerHTML=Math.floor(h/10);
        spans[1].innerHTML=h%10;
        spans[3].innerHTML=Math.floor(min/10);
        spans[4].innerHTML=min%10;
        spans[6].innerHTML=Math.floor(s/10);
        spans[7].innerHTML=s%10;
        if(time<=0){
            clearInterval(timer);
        }
    },1000);
};

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值