案例--电商放大镜--对事件的操作

实现效果

在这里插入图片描述

代码
js部分
//声明全局变量
var oldEle = null;
window.onload = function () {
    //加载完成事件
    var sblock = document.getElementsByClassName("s-block");
    var middlimg = document.getElementsByClassName("b-middle-img")[0];
    var btnleft = document.getElementsByClassName("btnleft")[0];
    var btnright = document.getElementsByClassName("btnright")[0];
    var bspar = document.getElementsByClassName("b-s-par")[0];
    var bmiddle = document.getElementsByClassName("b-middle")[0];
    var ceng = document.getElementsByClassName("ceng")[0];
    var bpar = document.getElementsByClassName("b-par")[0];
    var bigCeng = document.getElementsByClassName("bigCeng")[0];
    //将默认的元素赋值到oldEle
    oldEle = sblock[0];
    for (var i = 0; i < sblock.length; i++) {
        sblock[i].onmouseenter = function () {
            //记录之前把之前变色的清除
            oldEle.className = "s-block";
            this.className = "s-blockborder s-block";
            oldEle = this;//记录当前变色的

            //同步上面的中等图片变化
            middlimg.src = this.getAttribute("data-src");
            bigCeng.style.backgroundImage = "url(" + this.getAttribute("data-big") + ")";
        }
    }
    //左右点击事件
    btnleft.onclick = function () {
        bspar.style.marginLeft = "0px";
    }
    btnright.onclick = function () {
        bspar.style.marginLeft = -(456 - 310) + "px";
    }
    //上面中等图写事件
    bmiddle.onmouseenter = function () {
        ceng.style.display = "block";
        bigCeng.style.display = "block"
    }
    bmiddle.onmouseleave = function () {
        ceng.style.display = "none";
        bigCeng.style.display = "none"
    }
    bmiddle.onmousemove = function (e) {
        var x = e.pageX || e.clientX;
        var y = e.pageY || e.clientY;
        x = x - bpar.offsetLeft - parseFloat(ceng.style.width) / 2;
        y = y - bpar.offsetTop - parseFloat(ceng.style.height) / 2;
        //限制x,y
        var bigleft = (parseFloat(window.getComputedStyle(bmiddle).width) - parseFloat(ceng.style.width));
        var bigtop = (parseFloat(window.getComputedStyle(bmiddle).height) - parseFloat(ceng.style.height));
        x = x <= 0 ? 0 : x >= bigleft ? bigleft : x;
        y = y <= 0 ? 0 : y >= bigtop ? bigtop : y;
        ceng.style.left = x + "px";
        ceng.style.top = y + "px";

        //鼠标移动大图跟着移动  计算移动比例
        bigCeng.style.backgroundPosition = (-x * 2.2857) + "px " + (-y * 1.9047) + "px";
html部分
<div class="b-par">
    <div class="b-mid

dle">
        <div class="ceng" style="width: 196.876px;height: 262.50px;"></div>
        <img class="b-middle-img" src=

"./img/middle8.jpg" alt=""/>
    </div>
    <div class="bigCeng">

    </div>
    <div class="b-small">
        <span class="btnleft"><</span>
        <div class="b-small-middle">
            <div class="b-s-par">
                <div class="s-block s-blockborder"  data-big="./img/big8.jpg" data-src="./img/middle8.jpg"><img src="./img/small8.jpg" alt=""/></div>
                <div class="s-block" data-big="./img/big5.jpg" data-src="./img/middle5.jpg"><img src="./img/small5.jpg" alt=""/></div>
                <div class="s-block" data-big="./img/big6.jpg" data-src="./img/middle6.jpg"><img src="./img/small6.jpg" alt=""/></div>
                <div class="s-block" data-big="./img/big7.jpg" data-src="./img/middle7.jpg"><img src="./img/small7.jpg" alt=""/></div>
                <div class="s-block" data-big="./img/big1.jpg" data-src="./img/middle1.jpg"><img src="./img/small1.jpg" alt=""/></div>
                <div class="s-block" data-big="./img/big2.jpg" data-src="./img/middle2.jpg"><img src="./img/small2.jpg" alt=""/></div>
                <div class="s-block" data-big="./img/big3.jpg" data-src="./img/middle3.jpg"><img src="./img/small3.jpg" alt=""/></div>
                <div class="s-block" data-big="./img/big4.jpg" data-src="./img/middle4.jpg"><img src="./img/small4.jpg" alt=""/></div>
            </div>
        </div>
        <span class="btnright">></span>
    </div>
</div>
css部分
* {
    margin: 0;
    padding: 0;
}

img {
    border: 0;
    vertical-align: middle;
}

.b-par {
    position: relative;
    width: 350px;
    height: 500px;
    margin: auto;
}

.b-middle {
    position: relative;
    width: 350px;
    height: 420px;
    border: 1px solid silver;
    cursor: move;
}

.b-middle-img {
    width: 100%;
    height: 100%;
}

.b-small {
    position: relative;
    width: 350px;
    height: 80px;
    font-size: 0;
}

.b-small div.s-block {
    width: 54px;
    height: auto;
    display: inline-block;
    margin: 0 3px 0 0;
    box-sizing: border-box;
    border: 3px solid transparent;
}

.b-small div.s-block img {
    width: 100%;
    height: 100%;
}

.b-s-par {
    width: 456px;
    margin: 12px 0;
    transition: margin-left .5s linear;
}

.b-small-middle {
    width: 310px;
    height: auto;
    overflow: hidden;
    margin: 0 20px;
}
.b-small>span{
    position: absolute;
    width: 20px;
    height: 80px;
    display: block;
    z-index:999;
    color: silver;
    text-align: center;
    line-height:80px;
    font-size: 20px;
    cursor: pointer;
}
.b-small>span:hover{
    background-color: silver;
    color: #fff;
}
.b-small>span:nth-child(1){
    left: 0;
    top: 0;
}
.b-small>span:nth-child(3){
    right: 0;
    top: 0;
}
.s-blockborder{
    border-color: #e40000 !important;
}
.ceng{
    display: none;
    position: absolute;
    z-index: 1;
    left: 0;
    top: 0;
    background: url("./img/bg.png");
    background-size: 4px 4px;
}
.bigCeng{
    position: absolute;
    display: none;
    left: 351px;
    top: 0;
    width: 450px;
    height: 500px;
    border: 1px solid silver;
    background: url("./img/big8.jpg") no-repeat;

}

//如果图片不能将高全部填充,下底留缝,则将图片的样式加

vertial-align:middle;//垂直居中

//把块级元素转化为行级块的时候,会默认留5px的间距,这个时候给父级元素中设置font-size:0;即可解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值