如何将全局变量i变成函数的局部变量?


<style>
.x1{width: 50px;height: 50px;background: red;top:50px;left:30px;position: relative;}
</style>

<div id="x" class="x1">
</div>

<script>
    var ctx = document.getElementById("x");
    var i=50;
    function z(){
        ctx.style.left = 200+i+"px";
        i = i+50;
    }
    setInterval("z()",1000);

</script>

上述代码是一个自动移动div的代码,我有两个问题:
1、如何将全局变量i变成函数z的局部变量?
2、如果要做出图片轮播的那种效果,必须使用setInterval来控制移动速度吗?有没有别的办法?

谢谢。
(p.s 重点是问题1)


加个闭包。

function z() {
    var i = 50;
    return function() {
        ctx.style.left = 200 + i + 'px';
        i = i + 50;
    }
}
var Z = z();
setInterval('Z()', 1000);

z={
    i:50,
    fun:function(){
        ctx.style.left = 200+i+"px";
        this.i+=50
    }
}

setInterval('z.fun()',1000);



相关阅读:
vue应用嵌在微信里 ,点击微信右上角的分享其中一个页面的链接 ,怎样让用户点开来就是当前页面呢?
AngularJS路由添加controller问题
PC端API和移动端API有什么不同吗?
pycharm 如何配置 python3 的开发环境?
vue中通过this.$router.push 到当前页面,只是参数不同,页面没有重新请求数据?
vue.js2.0中set和get的问题
$.ajax 跨域 options
mysql 的IFNULL失效
webpack在安装的时候出现问题
使用websocket上传视频文件后无法播放
作用域链的问题?
angular.js高级程序设计书本开头配置环境出错,谁能给解答一下
样式和类样式区别
关于this在浏览器中的指向
在node.js里面可以使用window对象的方法吗
angularjs如何将字符串类型的时间格式化呢
bundle-loader解析import异于ES6 module
video标签怎么控制播放内容的宽高?
IE兼容 React
弹出提示窗口JS怎么设置弹出一次,假设多弹出也要把前者取消,让后者弹出一次?



快速导航

Copyright © 2016 phpStudy |