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)
};
}