各种变量无法引用,如何解决?

hinada99 2010-07-23 04:08:00
预期的实验效果
网页上有3个按钮
按钮1: 创建, 单击后创建一个 名叫newfrm 的大小为10*可达像素高(screen.availHeight)
按钮2:窗口变大, 单击后,newfrm以水平方向没秒增加50个像素的大小增大。下列任意一种情况发生,函数会终止 (1)newfrm的width到达screen.Width值。(2)用户点击了按钮3.
按钮3: 停止变大, 单击后, newfrm停止变大

//下面这段代码还没成功, 关键是在function amplify()中引用到的newfrm有点问题。应该怎么改才能实现预期的功能呢?
<html>

<body>
<script type="text/javascript">

var stop_call=setInterval("amplify()",1000)
var newfrm
var x=10

function create()
{
window.open("","newfrm",style="width: 10; height:screen.availHeight")
}


function amplify()
{
if(x<=screen.availWidth)
{
x=x+50
newfrm.resizeTo(x,screen.availHeight)
}
setInterval("amplify()",1000)
}

function stop()
{
clearInterval(stop_call)
}

</script>
<input type="button" id="b1" value="创建新窗口"onclick="create()"/>
<input type="button" id="b2" value="窗口变大" onclick="amplify()"/>
<input type="button" id="b3" value="停止变大" onclick="stop()"/>
</body>
</html>
...全文
124 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
closure 2010-07-23
  • 打赏
  • 举报
回复
呃,上面论坛代码用错了,更正一下;
另外更正后满足你窗口起始宽度为10,高度为屏幕高度的需求:
var x = 10;


var stop_call;
var newfrm;

function create() {
newfrm = window.open("about:blank","newfrm", "width=10,height=" + screen.availHeight);
}


function amplify() {
if(x<=screen.availWidth) {
x=x+50;
newfrm.resizeTo(x,screen.availHeight);
stop_call = setTimeout("amplify()",1000);
}
}

function stop() {
clearTimeout(stop_call);
}
closure 2010-07-23
  • 打赏
  • 举报
回复
关键是用newfrm来接受window.open的返回值,这样你就得到了新窗口的引用。
setInterval要改成setTimeout;
当x已经大于screen.availWidth以后就不要再setTimeout了
(要把setTimeout那行放进if语句里面去)。

var x = 10;


var stop_call;
var newfrm;

function create() {
newfrm = window.open("","newfrm",style="width: 10; height:screen.availHeight");
}


function amplify() {
if(x<=screen.availWidth) {
x=x+50;
newfrm.resizeTo(x,screen.availHeight);
stop_call = setTimeout("amplify()",1000);
}

}

function stop() {
clearTimeout(stop_call);
}
zoujp_xyz 2010-07-23
  • 打赏
  • 举报
回复
<script type="text/javascript">
var newfrm, x = 10, stop_call;
function create() {
newfrm = window.open('', 'newwindow', 'height=50,width=50,top=0,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no');
}
function amplify() {
if (x <= screen.availWidth) {
x = x + 50;
newfrm.resizeTo(x, screen.availHeight);
}
stop_call = setInterval("amplify()", 10000);
}
function stop() {
clearInterval(stop_call);
}
</script>
hoojo 2010-07-23
  • 打赏
  • 举报
回复

不能改变窗口的大小;可以用div来模拟窗口;然后改变大小
dojotoolkit 2010-07-23
  • 打赏
  • 举报
回复
function amplify()
{
if(x<=screen.availWidth)
{
x=x+50
newfrm.resizeTo(x,screen.availHeight)
}
//setInterval("amplify()",1000)
}

前面已经setInterval过执行amplify方法了,函数里不需要再setInterval
kyzy_yy_pm 2010-07-23
  • 打赏
  • 举报
回复
关键是你定义的变量时在原来的窗体里,而新打开的窗体里面可是没有这些变量的啊
hinada99 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wc1217 的回复:]
setInterval是循环执行..
你试试 setTimeout???
[/Quote]
这个问题我觉得 是变量引用规则的问题 不是没选对方法 能说透彻的大侠们 ,怎么整这个标识符引用?
hinada99 2010-07-23
  • 打赏
  • 举报
回复
要的就是循环执行
不需要延迟
wc1217 2010-07-23
  • 打赏
  • 举报
回复
setInterval是循环执行..
你试试 setTimeout???

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧