JSFiddle - React, Tailwind, and code Playground
by crab1127
HTML
<div id="box">
<ul>
<li>
<img src="http://fgm.cc/learn/lesson5/img/shirt_1.jpg" />
</li>
<li>
<img src="http://fgm.cc/learn/lesson5/img/shirt_2.jpg" />
</li>
<li>
<img src="http://fgm.cc/learn/lesson5/img/shirt_3.jpg" />
</li>
<li>
<img src="http://fgm.cc/learn/lesson5/img/shirt_4.jpg" />
</li>
</ul>
</div>
<div id="big">
<div></div>
</div>
CSS
html, body {
overflow:hidden;
}
body, div, ul, li {
margin:0;
padding:0;
}
#box ul {
width:768px;
height:172px;
list-style-type:none;
margin:10px auto;
}
#box li {
float:left;
width:170px;
height:170px;
cursor:pointer;
display:inline;
border:1px solid #ddd;
margin:0 10px;
}
#box li.active {
border:1px solid #a10000;
}
#box li img {
width:170px;
height:170px;
vertical-align:top;
}
#big {
position:absolute;
width:400px;
height:400px;
border:2px solid #ddd;
display:none;
}
#big div {
position:absolute;
top:0;
left:0;
width:400px;
height:400px;
opacity:0.5;
filter:alpha(opacity=50);
background:#fff url(http://fgm.cc/learn/lesson5/img/loading.gif) 50% 50% no-repeat;
}
JavaScript
var aLi = document.getElementsByTagName("li");
var oBig = document.getElementById("big");
var oLoading = oBig.getElementsByTagName("div")[0];
var i = 0;
for (i = 0; i < aLi.length; i++) {
aLi[i].index = i;
aLi[i].onmouseover = function () {
var oImg = document.createElement('img');
var img = new Image();
img.src = oImg.src = aLi[this.index].getElementsByTagName('img')[0].src.replace('.jpg', '_big.jpg');
oBig.appendChild(oImg);
this.className = 'active';
oBig.style.display = oLoading.style.display = "block";
img.complete ? oLoading.style.display = 'none' : (oImg.onload = function () {
oLoading.style.display = 'none';
})
};
aLi[i].onmousemove = function (event) {
var event = event || window.event;
var iWidth = document.documentElement.offsetWidth - event.clientX;
oBig.style.top = event.clientY + 20 + 'px';
oBig.style.left = (iWidth < oBig.offsetWidth + 10 ? event.clientX - oBig.offsetWidth - 10 : event.clientX + 10) + 'px';
};
aLi[i].onmouseout = function () {
this.className = '';
oBig.style.display = 'none';
oBig.removeChild(oBig.lastChild)
};
}