<html>
<head>
<style type="text/css">
* {
margin:0;
padding:0;
}
body {
margin:0;
text-align:center;
background:#f0f0f0;
}
#d1 {
position:absolute;
top:20px;
left:0;
width:100px;
height:60px;
border:1px solid #808;
}
#open1, #close1 {
cursor:pointer;
background:#ccf;
margin:5px;
}
#open1 {
display:block;
}
#close1 {
display:none;
}
</style>
</head>
<body>
<div id="d1">移动位置<span id="open1" onclick="fo1()">Open</span><span id="close1" onclick="fc1()">Close</span></div>
<script type="text/javascript">
var sl = 0; //初始left值
var el = 500; //结束left值
var p = 10; //缓冲变量
var t = 15; //时间变量
var d1 = document.getElementById('d1');
var open1 = document.getElementById('open1');
var close1 = document.getElementById('close1');
function fo1() {
var cl = parseInt(getStyle(d1,'left')); //当前left值
if (cl<el) {
d1.style.left = cl + Math.ceil((el-cl)/p) + 'px'; //当前值+缓冲增量
setTimeout('fo1()', t);
} else {
d1.style.left = el + 'px';
open1.style.display = 'none';
close1.style.display = 'block';
}
}
function fc1() {
var cl = parseInt(getStyle(d1,'left')); //当前left值
if (cl>sl) {
d1.style.left = cl - Math.ceil((cl-sl)/p) + 'px'; //当前值-缓冲增量
setTimeout('fc1()', t);
} else {
d1.style.left = sl + 'px';
open1.style.display = 'block';
close1.style.display = 'none';
}
}
function getStyle( elem, name ) { 
if (elem.style[name]) { return elem.style[name]; } 
else if (elem.currentStyle) { return elem.currentStyle[name]; } 
else if (document.defaultView && document.defaultView.getComputedStyle) { 
name = name.replace(/([A-Z])/g,"-$1"); 
name = name.toLowerCase(); 
var s = document.defaultView.getComputedStyle(elem,""); 
return s && s.getPropertyValue(name); 

else { return null; } 
}
</script>
</body>
</html>它现在是用 fo1() 和 fc1() 两个动作来实现向右移动和归位, 这样就需要两个 onclick 的对象, 很麻烦, 不知道有没有办法改成一个动作, 点击一次是向右移动, 再点击一次是归位, 十分感谢!

解决方案 »

  1.   


    <html>
    <head>
    <style type="text/css">
    * {
        margin:0;
        padding:0;
    }
    body {
        margin:0;
        text-align:center;
        background:#f0f0f0;
    }
    #d1 {
        position:absolute;
        top:20px;
        left:0;
        width:100px;
        height:60px;
        border:1px solid #808;
    }
    #pad {
        cursor:pointer;
        background:#ccf;
        margin:5px;
    }
    </style>
    </head>
    <body>
    <div id="d1">移动位置<span id="pad" onclick="fo1()">Open</span></div>
    <script type="text/javascript" defer>
    var sl = 0;    //初始left值
    var el = 500;    //结束left值
    var p = 10;    //缓冲变量
    var t = 15;    //时间变量
    var d1 = document.getElementById('d1');
    var pad = document.getElementById("pad");
    var b = true;
    var tid = null;
    function fo1() {
    if(tid!=null) {clearTimeout(tid);tid=null}
        var cl = parseInt(getStyle(d1,'left'));
        var str, ep, po;
    if(b){str="Close";ep=cl<el;po=el}
    else {str="Open";ep=cl>sl;po=sl}
        if (ep) {
            if(b) d1.style.left = cl + Math.ceil(Math.abs(po-cl)/p) + 'px';    //当前值+缓冲增量
            else d1.style.left = cl - Math.ceil(Math.abs(po-cl)/p) + 'px';    //当前值-缓冲增量
            tid = setTimeout('fo1()', t);
        } else {
            d1.style.left = po + 'px';
            pad.innerHTML = str
        b = !b;
        }
    }
    function getStyle( elem, name ) { 
        if (elem.style[name]) { return elem.style[name]; } 
        else if (elem.currentStyle) { return elem.currentStyle[name]; } 
        else if (document.defaultView && document.defaultView.getComputedStyle) { 
            name = name.replace(/([A-Z])/g,"-$1"); 
            name = name.toLowerCase(); 
            var s = document.defaultView.getComputedStyle(elem,""); 
            return s && s.getPropertyValue(name); 
        } 
        else { return null; } 
    }
    </script>
    </body>
    </html>
      

  2.   

    <html>
    <head>
    <style type="text/css">
    * {
        margin:0;
        padding:0;
    }
    body {
        margin:0;
        text-align:center;
        background:#f0f0f0;
    }
    #d1 {
        position:absolute;
        top:20px;
        left:0;
        width:100px;
        height:60px;
        border:1px solid #808;
    }
    .button {
        cursor:pointer;
        background:#ccf;
        margin:5px;
    }
    </style>
    </head>
    <body>
    <div id="d1">移动位置<span onclick="func()" class="button">click</span></div>
    <script type="text/javascript">
    var origin = true;
    var sl = 0;    //初始left值
    var el = 500;    //结束left值
    var p = 10;    //缓冲变量
    var t = 15;    //时间变量
    var d1 = document.getElementById('d1');
    function func(){
    if(origin){
      var cl = parseInt(getStyle(d1,'left'));    //当前left值
           if (cl<el) {
                  d1.style.left = cl + Math.ceil((el-cl)/p) + 'px';    //当前值+缓冲增量
                  setTimeout('func()', t);
         } else {
                  d1.style.left = el + 'px';
                  origin = false;
              }
    }else{
        var cl = parseInt(getStyle(d1,'left'));    //当前left值
                if (cl>sl) {
                  d1.style.left = cl - Math.ceil((cl-sl)/p) + 'px';    //当前值-缓冲增量
                  setTimeout('func()', t);
                } else {
                  d1.style.left = sl + 'px';
          origin = true;
                }
    }
    }
    function getStyle( elem, name ) { 
        if (elem.style[name]) { return elem.style[name]; } 
        else if (elem.currentStyle) { return elem.currentStyle[name]; } 
        else if (document.defaultView && document.defaultView.getComputedStyle) { 
            name = name.replace(/([A-Z])/g,"-$1"); 
            name = name.toLowerCase(); 
            var s = document.defaultView.getComputedStyle(elem,""); 
            return s && s.getPropertyValue(name); 
        } 
        else { return null; } 
    }
    </script>
    </body>
    </html>
      

  3.   

    谢谢楼上两位, 刚想了一下, 如果页面上有 n 个矩形, 点击其中任意的一个让它向右移动的时候, 如果有其它矩形已经在右边了, 就让已经在右边的那些矩形回到左边. 也就是说, 在右边的只能有一个矩形. 不知道好不好实现. 另外 "var sl = 0; //初始left值" 这个值可不可以直接取矩形在 css 中定义的那个原始 left 值, 谢谢.
      

  4.   

    <html>
    <head>
    <style type="text/css">
    * {
        margin:0;
        padding:0;
    }
    body {
        margin:0;
        text-align:center;
        background:#f0f0f0;
    }
    #d1 {
        position:absolute;
        top:20px;
        left:0;
        width:100px;
        height:60px;
        border:1px solid #808;
    }
    #open1, #close1 {
        cursor:pointer;
        background:#ccf;
        margin:5px;
    }
    #open1 {
        display:block;
    }
    #close1 {
        display:none;
    }
    </style>
    </head>
    <body>
    <div id="d1">移动位置<span id="open1" onclick="fo1()">Open</span><span id="close1" onclick="fo1()">Close</span></div>
    <script type="text/javascript">
    var sl = 0;    //初始left值
    var el = 500;    //结束left值
    var p = 10;    //缓冲变量
    var t = 15;    //时间变量
    var d1 = document.getElementById('d1');
    d1["moved"]=false;
    var open1 = document.getElementById('open1');
    var close1 = document.getElementById('close1');
    function fo1() {
        var cl = parseInt(getStyle(d1,'left')); //当前left值
        if ((cl==el&&!d1["moved"])||(cl==sl&&d1["moved"])) {
            d1.style.left = (d1["moved"]?sl:el) + 'px';
            open1.style.display = 'none';
            close1.style.display = 'block';
    d1["moved"]=!d1["moved"]    }else {
            d1.style.left = cl + (d1["moved"]?-Math.ceil((cl-sl)/p):Math.ceil((el-cl)/p)) + 'px';    //当前值+缓冲增量
            setTimeout('fo1()', t);
        } 
    }
    function getStyle( elem, name ) { 
        if (elem.style[name]) { return elem.style[name]; } 
        else if (elem.currentStyle) { return elem.currentStyle[name]; } 
        else if (document.defaultView && document.defaultView.getComputedStyle) { 
            name = name.replace(/([A-Z])/g,"-$1"); 
            name = name.toLowerCase(); 
            var s = document.defaultView.getComputedStyle(elem,""); 
            return s && s.getPropertyValue(name); 
        } 
        else { return null; } 
    }
    </script>
    </body>
    </html>