一,问题描述
- 当鼠标移动到图片上时,对应的大图片悬浮在鼠标的附近位置,而且移入的时候,图片时缓慢加载的,直到大图片被完全加载完成。当鼠标已经移入图片上时,以偶定的同时大图片也跟着移动。
二,效果预览
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190802143541709.gif)
三,用到的主要事件
- onmouseover:鼠标略过事件
- onmouseout:鼠标移出事件
- onmousemove:鼠标移动事件
- window.onload:页面加载事件
四,遇到的问题
- 大图片不断的闪动
- 原因:鼠标和大图片区域没有间距,遮挡了小图片的区域,使得触发了onmouseout事件,然后大图片消失,消失后小图片区域没有了遮挡,又触发了onmouseover事件,然后大图片区域出校,由于鼠标和大图片区域没有间距,这样不断地循环,就出现了大图片不断闪动的现象。
- 解决办法:定位大图片区域的时候,给他的右边和上边,设置5-10px的距离即可,具体值可以自定义。
五,完整代码
- 代码结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190802144901316.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MTcwNTI2,size_16,color_FFFFFF,t_70)
- Html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<link rel="stylesheet" type="text/css" href="../css/big.css"/>
<script src="../js/big.js" type="text/javascript" charset="utf-8"></script>
<body>
<div id="nav">
<div id="top" w="410" h="340">
<img src="../images/apple_1.jpg"/>
</div>
</div>
</body>
</html>
*{
padding: 0px;
margin: 0px;
}
#nav{
width: 600px;
height: auto;
position: relative;
}
#top{
position: absolute;
width: 100px;
height: 76px;
top: 200px;
left:300px;
border:1px solid red ;
}
#top>img{
width: 100%;
height: 100%;
}
#big{
width: 0px;
height: 0px;
margin: 0 auto;
border: 4px solid black;
background-color: gray;
text-align: center;
position: absolute;
overflow: hidden;
}
#big img{
padding-top: 5px;
}
#big p{
font-size: 26px;
color: orange;
}
#cover{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 10;
}
window.onload=function(){
nav=document.getElementById("nav");
Top=document.getElementById("top");
bigW=Top.getAttribute("w");
bigH=Top.getAttribute("h");
timer=null;
W=0;
H=0;
Big();
}
function Big(){
Top.onmouseover=function(){
var evt=event?event:window.event;
var pointL=evt.pageX+5;
var pointT=evt.pageY+5;
var div=document.createElement("div");
div.id="big";
var img=document.createElement("img");
img.src="../images/apple_1_bigger.jpg";
var p=document.createElement("p");
p.innerHTML="VIVO众享品质";
div.appendChild(img);
div.appendChild(p);
nav.appendChild(div);
div.style.left=pointL+"px";
div.style.top=pointT+"px";
if(timer==null){
timer=window.setInterval(change,20);
}
}
Top.onmouseout=function(){
var div=document.getElementById("big");
if(div!=null){
div.remove();
}
}
Top.onmousemove=function(){
var evt=event?event:window.event;
var pointL=evt.pageX+5;
var pointT=evt.pageY+5;
var div=document.getElementById("big");
if(div!=null){
div.style.left=pointL+"px";
div.style.top=pointT+"px";
}
}
}
function change(){
W=W+15;
H=H+10;
if(W>bigW){
W=bigW;
}
if(H>bigH){
H=bigH;
}
var div=document.getElementById("big");
if(div!=null){
div.style.width=W+"px";
div.style.height=H+"px";
}
if(W==bigW&&H==bigH){
if(timer!=null){
window.clearInterval(timer);
timer=null;
W=0;
H=0;
}
}
}
六,效果演示
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190802145208175.gif)