Js实现类似图片相册左右切换效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Js版淘宝图片切换,类似相册播放效果</title>
    <style type="text/css">
        *
        
{
            margin
: 0;
            padding
: 0;
            vertical-align
: top;
        
}
        img
        
{
            border
: 0 none;
        
}
        .photo
        
{
            width
: 736px;
            height
: 213px;
            overflow
: hidden;
            position
: relative;
        
}
        .photo .step
        
{
            position
: absolute;
            bottom
: 10px;
            right
: 15px;
            height
: 23px;
            z-index
: 2;
            color
: #fff;
            font-size
: 14px;
            font-weight
: bold;
            vertical-align
: middle;
            cursor
: pointer;
        
}
        .photo .step em
        
{
            margin
: 0 5px;
        
}
        .photo ul
        
{
            float
: left;
            position
: absolute;
            top
: 0;
            left
: 0;
            width
: 2208px;
        
}
        .photo li
        
{
            float
: left;
            background
: #09e;
        
}
        .photo li img
        
{
            display
: block;
            width
: 736px;
            height
: 213px;
        
}
    
</style>
</head>
<body>
    <!--column-->
    <div class="column">
        <div class="photo" id="photo">
            <ul class="clear" id="photo-sub" style=" 2944px">
                <li><href="#nogo" title="四季如春" target="_blank">
                    <img src="http://www.codefans.net/jscss/demoimg/wall1.jpg" alt="" /></a></li>
                <li><href="#nogo" title="世界风光" target="_blank">
                    <img src="http://www.codefans.net/jscss/demoimg/wall2.jpg" alt="" /></a></li>
                <li><href="#nogo" title="黄河之谜" target="_blank">
                    <img src="http://www.codefans.net/jscss/demoimg/wall3.jpg" alt="" /></a></li>
                <li><href="#nogo" title="仅供测试" target="_blank">
                    <img src="http://www.codefans.net/jscss/demoimg/wall4.jpg" alt="" /></a></li>
            </ul>
            <div class="step" id="step-num">
                <span>上一页</span><em>1</em>/<em>3</em><span>下一页</span></div>
        </div>
    </div>
    <!--column end-->
    <script type="text/javascript">
function photoAlbumn(photoObj,btnObj,numObj){
var moveNum = 1,
_void=true,
cloneObj,nums,
voidClone=false,
d=document,
elem = d.getElementById(photoObj),
btnObj=d.getElementById(btnObj),
numObj=d.getElementById(numObj);
if (!elem) return false;
if (!btnObj) return false;
var elemObj = elem.getElementsByTagName("li"),
autoWidth = elemObj[0].offsetWidth,
btns = btnObj.getElementsByTagName("span"),
max=elemObj.length;
elem.style.width = (max+1)*autoWidth + "px";
var numElement =function(){
if(numObj){
nums = numObj.getElementsByTagName("em");
nums[1].innerHTML = max;
nums[0].innerHTML = moveNum;
}
}
var moveElement =function(final_x,final_y,interval){
_void = false;
var step = function () {
if (elem.movement) clearTimeout(elem.movement);
if (!elem.style.left) elem.style.left = "0px";
if (!elem.style.top) elem.style.top = "0px";
var xpos = parseInt(elem.style.left);
var ypos = parseInt(elem.style.top);
//alert(xpos)
if (xpos == final_x && ypos == final_y) {
_void = true;
if(voidClone){
elem.style.left = (moveNum > 2)?(-(max-1)*autoWidth +"px"):"0px";
elem.removeChild(cloneObj);
voidClone = false;
}
return true;
}
if (xpos < final_x) {
var dist = Math.ceil((final_x - xpos)/10);
xpos = xpos + dist;
}
if (xpos > final_x) {
var dist = Math.ceil((xpos - final_x)/10);
xpos = xpos - dist;
}
if (ypos < final_y) {
var dist = Math.ceil((final_y - ypos)/10);
ypos = ypos + dist;
}
if (ypos > final_y) {
var dist = Math.ceil((ypos - final_y)/10);
ypos = ypos - dist;
}
elem.style.left = xpos + "px";
elem.style.top = ypos + "px";
elem.movement = setTimeout(function(){step()},interval);
}
elem.movement = setTimeout(function(){step()},interval);
} ;
var moveAutoShow = function (){
moveNum++;
if(moveNum > max){
cloneObj = elemObj[0].cloneNode(true);
elem.appendChild(cloneObj);
voidClone = true;
}
moveElement(-autoWidth*(moveNum-1),0,5);
if(moveNum > max) moveNum=1;
numElement();
};
var prepareSlideshow = function (){
var moveAuto = setInterval(function(){moveAutoShow()},5000);
btns[0].onmousedown = function() {
if(!_void) return false;
clearInterval(moveAuto);
moveNum--;
if(moveNum < 1){
cloneObj = elemObj[(max-1)].cloneNode(true);
cloneObj.style.cssText=";position:absolute;left:-" + autoWidth +"px";
elem.insertBefore(cloneObj,elemObj[0]);
voidClone = true;
}
moveElement(-autoWidth*(moveNum-1),0,5);
moveAuto = setInterval(function(){moveAutoShow()},5000);
if(moveNum < 1) moveNum=max;
numElement();
}
btns[1].onmousedown = function() {
if(!_void) return false;
clearInterval(moveAuto);
moveNum++;
if(moveNum > max){
cloneObj = elemObj[0].cloneNode(true);
elem.appendChild(cloneObj);
voidClone = true;
}
moveElement(-autoWidth*(moveNum-1),0,5);
moveAuto = setInterval(function(){moveAutoShow()},5000);
if(moveNum > max) moveNum=1;
numElement();
}
};
numElement();
prepareSlideshow();
}
photoAlbumn("photo-sub","photo","step-num");
    </script>
</body>
</html>
原文地址:https://www.cnblogs.com/majunfeng/p/3933840.html