鼠标跟随(jQuery5)

item

显示效果图8,

小图片大图片布局

1
2
3
4
5
6
7
8
9
10
<div class="box" id="box">
<img src="img/1.jpg" bigImg="img/1_bigger.jpg">
<img src="img/2.jpg" bigImg="img/2_bigger.jpg">
<img src="img/3.jpg" bigImg="img/3_bigger.jpg">
<img src="img/4.jpg" bigImg="img/4_bigger.jpg">
<!-- mark下的 -->
<div id="mark">
<img src="img/1_bigger.jpg">
</div>
</div>

设置小图片与大图片样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
body,div,img{
margin:0px;
padding:0px;
}
.box img{
display:block;
border:none;
}
.box{
position:relative;
margin:20px auto;
width:448px;
}
.box img{
float:left;
margin-left: 10px;
width:100px;
height: 75px;
border:1px solid #008000;
}
#mark{
display: none;
position: absolute;
top:0
left:0;
z-index: 10;
width:400px;
height:300px;
border:1px solid #0077B0;
}
/*需清除.box img继承的属性*/
#mark img{
float:none;/*默认值是inherit*/
margin-left: 0;
border:none;
width:100%;/*少个分号会出错*/
height:100%;
}

jQuery步骤

显示计算大图片位置坐标图9

  • [ ] 给小图绑定mouseover事件

    当事件触发,mark即show(秒数)出来

    根据图9计算出大图mark出现的位置

    根据事件源e.target获得当前触发事件的自定义属性bigImag来修改mark子元素img的src(实现切换不同图片的大图)

  • [ ] 继续给小图绑定mousemove事件

    随着鼠标移动修改(根据图9计算出)大图mark的位置(实现跟随鼠标移动)

  • [ ] 再继续给小图绑定mouseout事件
    隐藏mark
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    // 等价于$(document).ready()当页面上的HTML结构都加载完成再执行对应的函数
    $(function(){
    var box=$("#box")
    , mark=$("#mark")
    , boxoffset=box.offset();
    // console.log(boxoffset);
    //取得子元素 $("#box>img")
    // box.children("img").bind("mouseover")
    // box.children("img").on("mouseover")
    box.children("img").mouseover(function(e){
    e=e||window.event;
    e.target=e.target||e.srcElement; //事件源
    var left=e.clientX-boxoffset.left+10;
    var top=e.clientY-boxoffset.top+10;
    //hide/toggle/slideDown/slideUp/slideToggle/fadeIn/fadeOut/fadeToggle/animate
    //jQuery中 stop()必须清除上一次动画
    mark.stop().show(500).css({left:left,top:top}).find("img").attr("src",e.target.getAttribute("bigImg"));
    }).mousemove(function(e){
    e=e||window.event;
    var left=e.clientX-boxoffset.left+10;
    var top=e.clientY-boxoffset.top+10;
    mark.css({left:left,top:top});
    }).mouseout(function(e){
    mark.stop().hide(500);
    })
    })

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<script src="jquery-3.1.1.min.js" type="text/javascript"></script>
<title></title>
<style type="text/css">
body,div,img{
margin:0px;
padding:0px;
}
.box img{
display:block;
border:none;
}
.box{
position:relative;
margin:20px auto;
width:448px;
}
.box img{
float:left;
margin-left: 10px;
width:100px;
height: 75px;
border:1px solid #008000;
}
#mark{
display: none;
position: absolute;
top:0
left:0;
z-index: 10;
width:400px;
height:300px;
border:1px solid #0077B0;
}
/*需清除.box img继承的属性*/
#mark img{
float:none;/*默认值是inherit*/
margin-left: 0;
border:none;
width:100%;/*少个分号会出错*/
height:100%;
}
</style>
</head>
<body>
<div class="box" id="box">
<img src="img/1.jpg" bigImg="img/1_bigger.jpg">
<img src="img/2.jpg" bigImg="img/2_bigger.jpg">
<img src="img/3.jpg" bigImg="img/3_bigger.jpg">
<img src="img/4.jpg" bigImg="img/4_bigger.jpg">
<!-- mark下的 -->
<div id="mark">
<img src="img/1_bigger.jpg">
</div>
</div>
<script type="text/javascript">
// 等价于$(document).ready()当页面上的HTML结构都加载完成再执行对应的函数
$(function(){
var box=$("#box")
, mark=$("#mark")
, boxoffset=box.offset();
// console.log(boxoffset);
//取得子元素 $("#box>img")
// box.children("img").bind("mouseover")
// box.children("img").on("mouseover")
box.children("img").mouseover(function(e){
e=e||window.event;
e.target=e.target||e.srcElement; //事件源
var left=e.clientX-boxoffset.left+10;
var top=e.clientY-boxoffset.top+10;
//hide/toggle/slideDown/slideUp/slideToggle/fadeIn/fadeOut/fadeToggle/animate
//jQuery中 stop()必须清除上一次动画
mark.stop().show(500).css({left:left,top:top}).find("img").attr("src",e.target.getAttribute("bigImg"));
}).mousemove(function(e){
e=e||window.event;
var left=e.clientX-boxoffset.left+10;
var top=e.clientY-boxoffset.top+10;
mark.css({left:left,top:top});
}).mouseout(function(e){
mark.stop().hide(500);
})
})
</script>
</body>
</html>