JQurey鼠标跟随及实现方案

2019-10-24  本文已影响0人  追马的时间种草

鼠标跟随

话不多说同样先上效果图再上代码

效果图:

鼠标跟随.gif
文件结构图
1569809888816.png
代码

css

*{
    margin: 0;
    padding: 0;
}
.clearfix:after{ /*清除浮动*/
    display: block;
    height: 0;
    content: '';
    clear: both;
}
.container{
    position: relative;
    margin: 20px auto;
    width: 462px;
    height: 77px;
}
.container .imgBox li{
    float: left;
    margin-right: 18px;
    list-style: none;
    border: 1px solid #000000;
    width: 100px;
    height: 75px;
    overflow: hidden;
    box-shadow: aliceblue 0 0 5px 5px;
}
.container .imgBox li:nth-last-child(1){
    margin-right: 0;
}
.container .imgBox li img{
    display: block;
    width: 100%;
    height: 100%;
}
.container .mark{
    position: absolute;
    top: 0;
    left: 0;
    border: 1px solid #000;
    width: 400px;
    height: 300px;
    box-sizing: border-box;
}
.container .mark img{
    display: block;
    width: 100%;
    height: 100%;
    box-shadow: aliceblue 0 0 5px 5px;
}

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="mouse-flow.css">
</head>
<body>
        <!--如果小图和大图在名字上“没有固定的规则”,我们吧大图地址都以自定义属性得方式存储起来,后期需要展示大图的时候,自定义属性获取即可 如:<li><img src="img/images(1).jpg" data-bigger="img/images_1_bigger.jpg" alt=""></li>
    如果有固定的规则我们可以不采用自定义属性方式,而是基于规则自己处理和匹配即可.
    -->
    <!--此案例不采用自定义属性方式-->
<section class="container clearfix">
    <ul class="imgBox">
        <li><img src="img/images(1).jpg" alt=""></li>
        <li><img src="img/images(2).jpg" alt=""></li>
        <li><img src="img/images(3).jpg" alt=""></li>
        <li><img src="img/images(4).jpg" alt=""></li>
    </ul>
    <!--<div class="mark"><img src="img/images_1_bigger.jpg" alt=""></div>-->
</section>
<script src="https://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script src="mouse-flow.js"></script>
</body>
</html>

js

let $container=$('.container');
let $imgList=$('.container>ul>li'),
    $mark=null;
console.log($imgList);
$imgList.on('mouseover',function (ev) {
    console.log(ev);
    //动态创建MARK:根据经过的li中的小图片,动态管控MARK中的大图片
    let $src=$(this).children('img').attr('src');
    $srcStr=$src.replace(/\((\d+)\)/g,'_$1_bigger');
    if(!$mark){
        $mark=$(` <div class="mark"><img src="${$srcStr}" alt=""></div>`);
        $container.append($mark)
    }
}).on('mouseout',function (ev) {
    //=>移除mark
    if($mark){
        $mark.remove();
        $mark=null //鼠标移出后mark样式清空
    }
}).on('mousemove',function (ev) {
    //根据鼠标的位置计算出mark的位置
    let {top:conTop, left:conLeft}=$container.offset(),
        //让mark与鼠标的距离为“20”
        curL=ev.pageX-conLeft + 20,
        curT=ev.pageY-conTop+20;
    //设置mark位置
    $mark.css({
        top:curT,
        left:curL
    })
});

实现鼠标跟随的方案

方案一:

​ 每一个LI都是一个大盒子,大盒子存放的是大图,开始是隐藏的,鼠标进入到LI中,让其显示,并且让他的位置跟随鼠标的位置改变即可,鼠标离开LI让自己的大盒子消失即可(类似于放大镜SMALL-BOX中出现的MARK) 方案二:

​ 只有一个大盒子(可以在JS中动态的创建,也可以事先写好,控制显示隐藏),鼠标进入任意的LI都让大盒子中存放的图片根据进入的LI动态的改变,同样实现鼠标移动,让大盒子也跟随移动

上一篇下一篇

猜你喜欢

热点阅读