召集大家帮我完成一个JS问题 谢谢大家 麻烦大家点击这个链接地址 http://www.cnblogs.com/blueSkys/archive/2011/09/28/2194420.html 博客园的看看有啥解决办法 期待JS达人。。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 新手浅见 我觉得用<marquee>标签+css会更简单点 嘿嘿 谢谢。。但是这个demo不是为了实现功能 而是为了让自己有一些js技能有所提升 obj:null, obj_child1:null, obj_child2:null, time_id : null,这些没有闭包,有冲突吧。 按LZ现在的结构,没有new 一个实例。那么slide 永远都只是一个一般的对象,当第一次slide(xxxx)的时候,slide就是他自己,当再次slide(xxx)的时候,之前的slide 将会被新的slide对象覆盖。没有实例化啊 var slide = function(div_id,scro_direction,speed,width,height){ return new slide.prototype.init(div_id,scro_direction,speed,width,height);}slide.prototype = { init:function(div_id,scro_direction,speed,width,height){ }, .....}slide.prototype.init.prototype = slide.prototype;这么改一下,然后再编码的时候LZ注意一下this的指向 感觉 这不是 我想要的解决方式。 我这个例子 其实是仿照DOM_Drag 库来实现例子的。。这个库可以实现2个容器 同时具备拖动属性。。为啥 我这个不可以呢? 问题不大1、示例的 html 中两个 id 重名,而实际控制时 id 必须唯一2、需用数组保存实例的id,以便于定时控制 你是说time_id 吗? 我刚刚看过了 实际运行出来 2个time_id 应该是不同的哇 实际上仔细观察你会发现 window.onload = function () { slide.init('con', 'top', 30, '200px', '200px'); slide.init('coe','top',30,'200px','200px'); }这样执行时,下面列的滚动速度,要比注释掉第二行后,第一列的滚动速度要快。说明你两次的setInterval都执行了,只不过轮询执行的方法top_do都是对第二次的容器进行操作.问题出在 top_do 方法里,全局只有一个slide对象,在轮询执行时,都是对slide.obj以及slide.obj_child2和slide.obj_child1做判断,当你第二次调用init时,其实已经把这几个对象给覆盖了 所以说 我这种的解决办法 只有 new 也就是实例化后才能实现我要的效果吗? 不一定非要new,你只要把top_do方法里的几个变量用参数传递进来,比如把要操作的节点的id当做参数传递给top_do,然后在top_do方法里去getElementById取到这些元素进行判断操作,就可以了 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>img_slide</title> <script type="text/javascript" src="javascripts/slide.js"></script> <script type="text/javascript"> /** * @author jiashu */ var slide = { div_id:null, obj:null, obj_child1:null, obj_child2:null, time_id:null, //div_id 住容器的ID scro_direction 图片滚动方向 speed 滚动速度 init:function (div_id, scro_direction, speed, width, height) { if (document.getElementById(div_id) == null) { return false; } var container = document.getElementById(div_id);// slide.div_id = div_id; var inner_html = container.innerHTML; container.innerHTML = ""; var container_c1 = this.create_container("div", div_id + "1", inner_html); this.obj_child1 = div_id + "1";//对第一个字容器进行处理 var container_c2 = this.create_container("div", div_id + "2", inner_html); this.obj_child2 = div_id + "2";//对第二个子容器处理 container.appendChild(container_c1); container.appendChild(container_c2); container.style.overflow = "hidden"; container.style.width = width; container.style.height = height; container.scro_direction = scro_direction; container.speed = speed; this.start.call(container); container.onmouseout = slide.start; container.onmouseover = slide.stop; }, stop:function () { clearInterval(slide.time_id); }, start:function () { var con = slide.obj = this; slide.time_id = setInterval("slide.top_do(" + (slide.div_id + '1') + "," + (slide.div_id + '2') + "," + slide.div_id + ")", con.speed); }, top_do:function (id1, id2, id) { if (id2.offsetTop - id.scrollTop <= 0) { id.scrollTop -= id1.offsetHeight; } else { id.scrollTop++; } }, create_container:function (type, id, innerHTML) { var new_container = document.createElement(type); new_container.id = id; new_container.innerHTML = innerHTML; return new_container; } } window.onload = function () { slide.init('con', 'top', 30, '200px', '200px'); slide.init('coe','top',30,'200px','200px'); } </script></head><body><h1>New Web Project Page</h1><div id="con"> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p></div><div id="coe"> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p></div></body></html> 谢谢但是 这样我感觉脱离了我的初衷 我想把silde作为一个对象 里面obj_child1 只是它的属性这样的话 如果不new 是否可以有其他方式 做到 每次 调用init() 内存中就会有相应的silde对象保存下来 js 下载远程exe文件 jquery mobile 固定导航栏会闪屏 为什么我取iframe的document.body.scrollTop一直都是0? asp获取get值request.QueryString 那么javascript怎么获取这个值呢? 如何实现多选/或选择一个目录? 页面显示不全,重新拖动一下边框就没问题,搞不懂原因,请教高手了. C#类里边用javascript实现出错时弹出提示对话框,很繁琐,javascript高手来看. ◆◇关于页面自动重定向的问题??? 数据导入问题!在线等 求显示值判断语句写法 EXT 中 toolbar 按钮显示问题 opera问题
嘿嘿 谢谢。。但是这个demo不是为了实现功能 而是为了让自己有一些js技能有所提升
obj_child1:null,
obj_child2:null,
time_id : null,
这些没有闭包,有冲突吧。
return new slide.prototype.init(div_id,scro_direction,speed,width,height);
}
slide.prototype = {
init:function(div_id,scro_direction,speed,width,height){
},
.....
}
slide.prototype.init.prototype = slide.prototype;这么改一下,然后再编码的时候LZ注意一下this的指向
1、示例的 html 中两个 id 重名,而实际控制时 id 必须唯一
2、需用数组保存实例的id,以便于定时控制
你是说time_id 吗? 我刚刚看过了 实际运行出来 2个time_id 应该是不同的哇
slide.init('con', 'top', 30, '200px', '200px');
slide.init('coe','top',30,'200px','200px');
}
这样执行时,下面列的滚动速度,要比注释掉第二行后,第一列的滚动速度要快。说明你两次的setInterval都执行了,只不过轮询执行的方法top_do都是对第二次的容器进行操作.问题出在 top_do 方法里,全局只有一个slide对象,在轮询执行时,都是对slide.obj以及slide.obj_child2和slide.obj_child1做判断,当你第二次调用init时,其实已经把这几个对象给覆盖了
所以说 我这种的解决办法 只有 new 也就是实例化后才能实现我要的效果吗?
不一定非要new,你只要把top_do方法里的几个变量用参数传递进来,比如把要操作的节点的id当做参数传递给top_do,然后在top_do方法里去getElementById取到这些元素进行判断操作,就可以了
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>img_slide</title>
<script type="text/javascript" src="javascripts/slide.js"></script>
<script type="text/javascript">
/**
* @author jiashu
*/ var slide = {
div_id:null,
obj:null,
obj_child1:null,
obj_child2:null,
time_id:null,
//div_id 住容器的ID scro_direction 图片滚动方向 speed 滚动速度
init:function (div_id, scro_direction, speed, width, height) {
if (document.getElementById(div_id) == null) {
return false;
} var container = document.getElementById(div_id);//
slide.div_id = div_id;
var inner_html = container.innerHTML;
container.innerHTML = ""; var container_c1 = this.create_container("div", div_id + "1", inner_html);
this.obj_child1 = div_id + "1";//对第一个字容器进行处理
var container_c2 = this.create_container("div", div_id + "2", inner_html);
this.obj_child2 = div_id + "2";//对第二个子容器处理 container.appendChild(container_c1);
container.appendChild(container_c2);
container.style.overflow = "hidden";
container.style.width = width;
container.style.height = height; container.scro_direction = scro_direction;
container.speed = speed; this.start.call(container);
container.onmouseout = slide.start;
container.onmouseover = slide.stop;
},
stop:function () {
clearInterval(slide.time_id);
},
start:function () {
var con = slide.obj = this;
slide.time_id = setInterval("slide.top_do(" + (slide.div_id + '1') + "," + (slide.div_id + '2') + "," + slide.div_id + ")", con.speed);
},
top_do:function (id1, id2, id) {
if (id2.offsetTop - id.scrollTop <= 0) {
id.scrollTop -= id1.offsetHeight;
}
else {
id.scrollTop++;
}
},
create_container:function (type, id, innerHTML) {
var new_container = document.createElement(type);
new_container.id = id;
new_container.innerHTML = innerHTML;
return new_container;
}
}
window.onload = function () {
slide.init('con', 'top', 30, '200px', '200px');
slide.init('coe','top',30,'200px','200px');
}
</script>
</head>
<body>
<h1>New Web Project Page</h1><div id="con">
<p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p>
</div><div id="coe">
<p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p> <p><img src="images/player.png"></p> <p><img src="images/enemy.png"></p>
</div>
</body>
</html>
谢谢但是 这样我感觉脱离了我的初衷 我想把silde作为一个对象 里面obj_child1 只是它的属性
这样的话 如果不new 是否可以有其他方式 做到 每次 调用init() 内存中就会有相应的silde对象保存下来