找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2721|回复: 28

取代expression的方法

[复制链接]
发表于 2009-6-24 05:41:25 | 显示全部楼层 |阅读模式
我做了一个导航,需要根据浏览器的宽度自动调整位置

之前我是这样写的:STRY="MARGIN-LEFT: expression(eval(document.body.scrollLeft)+eval(document.body.clientWidth/2)-50); "

这样虽然可以达到效果,可是大家都说这个 expression 不是好东西,但搞了半天也没有找到其他方法,请问大家有没有其他办法呢?

先谢过。
发表于 2009-6-24 08:47:35 | 显示全部楼层
直接写js
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-24 23:18:36 | 显示全部楼层
是的,我默认是用的JS写的,不过那是要在鼠标触发以后才显示的

我现在是想其中的一个按钮在没有触发也默认先显示出来。所以就用到了上面的STRY="MARGIN-LEFT: expression(eval(document.body.scrollLeft)+eval(document.body.clientWidth/2)-50); "

现在已经到达我想要的效果了,不过要将expression换掉,所以寻求其他表示方法。

不知道我讲清楚没有。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-25 04:00:45 | 显示全部楼层
我现在这样写,可是调用不出来,帮忙看下
<script type="text/javascript">
function weizi(idx){
var x = document.body.clientWidth/2 + document.body.scrollLeft - 50;
if (1== idx) {
$.left = x;
}
}
</script>

调用时是这样的 <div style="weizi(1)"></div>

可是调用不出来,这是什么原因啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-25 12:59:47 | 显示全部楼层
貌似大家对这个问题不感兴趣
回复 支持 反对

使用道具 举报

发表于 2009-6-25 13:12:50 | 显示全部楼层
原帖由 [i]iedoo 于 2009-6-25 04:00 发表
<div style="weizi(1)"></div>


好像不对吧?

onResize

[[i] 本帖最后由 buyu 于 2009-6-25 13:15 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-6-25 13:35:13 | 显示全部楼层
原帖由 [i]iedoo 于 2009-6-25 04:00 发表
我现在这样写,可是调用不出来,帮忙看下

function weizi(idx){
var x = document.body.clientWidth/2 + document.body.scrollLeft - 50;
if (1== idx) {
$.left = x;
}
}


调用时是这样的

可是调用 ...


有这样调用js 函数的么? 没见过,不知道哪位高人指点下,一般的好像都是window.onload = 函数名   。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-25 17:16:42 | 显示全部楼层
是啊,我就是觉得这样不对,可是这里要怎么做才能把document.body.clientWidth/2 + document.body.scrollLeft - 50这句弄进去呢?
回复 支持 反对

使用道具 举报

发表于 2009-6-25 17:20:53 | 显示全部楼层
原帖由 [i]buyu 于 2009-6-25 13:12 发表


好像不对吧?

onResize


用onResize触发js。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-25 20:08:15 | 显示全部楼层
原帖由 [i]dcchan 于 2009-6-25 17:20 发表


用onResize触发js。


onresize 事件是用来窗口或框架调整大小时用的吧,不知道跟我这里取得窗口大小有什么关系

我就是要 STRY="LEFT: expression(eval(document.body.scrollLeft)+eval(document.body.clientWidth/2)-50); " 这句用其他方式表达,就怎么难么?难道就不能给一个稍微直接一点的答案么?
回复 支持 反对

使用道具 举报

发表于 2009-6-25 20:37:05 | 显示全部楼层
window.onload=function(){
document.getElementById("test").style.marginLeft=document.body.clientWidth/2 + document.body.scrollLeft - 50;
}

<div id="test">这个是你要操作的DIV,把上面的函数放在Head中试试</div>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-25 21:12:40 | 显示全部楼层
window.onload=function(){
document.getElementById("test").style.marginLeft=document.body.clientWidth/2 + document.body.scrollLeft - 50;
}
</head>
<body onload="PremierOnglet();">
<div id="text" style="HEIGHT:50px;POSITION:absolute;VISIBILITY:visible;WIDTH:100px;"></div>


这样写吧?可是没有反应哦
回复 支持 反对

使用道具 举报

发表于 2009-6-25 21:33:11 | 显示全部楼层

 提示:您可以先修改部分代码再运行

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-25 23:56:30 | 显示全部楼层
不行,不行,不行啊,看来是没有办法咯  
回复 支持 反对

使用道具 举报

发表于 2009-6-26 12:15:09 | 显示全部楼层
这样呢:
window.onload=function(){
document.getElementById("test").style.marginLeft=document.body.clientWidth/2 + document.body.scrollLeft - 50 + "px";
PremierOnglet();
}
</head>
<body>
<div id="text" style="HEIGHT:50px;POSITION:absolute;VISIBILITY:visible;WIDTH:100px;"></div>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-26 15:51:00 | 显示全部楼层
一样没反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-27 06:09:58 | 显示全部楼层
  1. <script type="text/JavaScript">
  2. function weizi(){
  3. var weizileft=document.body.clientWidth/2 + document.body.scrollLeft - 250;
  4. document.getElementById('test').style.left = weizileft;
  5. }
  6. </script>
  7. </head>
  8. <body>
  9. <div id="text" style="HEIGHT:50px;POSITION:absolute;VISIBILITY:visible;WIDTH:100px;"></div>
复制代码


现在我这样写,可是有时候能实现,有时候又没反应,而且感觉有点慢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-27 19:08:41 | 显示全部楼层
怎么经典的高人都去哪里了?都好几天了,一个能解决问题的都没有
回复 支持 反对

使用道具 举报

发表于 2009-6-27 19:20:08 | 显示全部楼层
你应该把程序放到window.resize
不要用expression
回复 支持 反对

使用道具 举报

发表于 2009-6-27 19:46:15 | 显示全部楼层
把JS放在页面的最下面,定义一下方法,然后调用这个方法,试试看?
回复 支持 反对

使用道具 举报

发表于 2009-6-27 19:46:53 | 显示全部楼层
类似于这样的:
<script type="text/JavaScript">
function weizi(){
var weizileft=document.body.clientWidth/2 + document.body.scrollLeft - 250;
document.getElementById('test').style.left = weizileft;
}
weizi();
</script>
回复 支持 反对

使用道具 举报

发表于 2009-6-27 19:57:00 | 显示全部楼层
我看这个根本不需要JS。。。

width:50%;
margin-left:-50px;
text-align:right;

仅思路,未测试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-27 23:31:05 | 显示全部楼层

回复 21# FishStanding 的帖子

一样的效果,没有反应。奇怪的是在首页有效果,而其他页面都没有反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-27 23:33:58 | 显示全部楼层

回复 22# 鸡毛 的帖子

经测试没有效果的
回复 支持 反对

使用道具 举报

发表于 2009-6-29 10:37:57 | 显示全部楼层
云版说的对,你得用window的onresize事件(把21#改了一下):
<script type="text/JavaScript">
function weizi(){
var weizileft=document.body.clientWidth/2 + document.body.scrollLeft - 250;
document.getElementById('test').style.left = weizileft;
}
window.onload=function(){weizi();}
window.onresize =function(){weizi();}
</script>

[[i] 本帖最后由 ccddmm 于 2009-6-29 10:40 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-6-29 12:41:03 | 显示全部楼层
直接写执行函数就可以啦。
void function(){
  //execute statement
}();

或者
(function(){
  //execute statement
})();
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-3 12:40:01 | 显示全部楼层
原帖由 [i]ccddmm 于 2009-6-29 10:37 发表
云版说的对,你得用window的onresize事件(把21#改了一下):

function weizi(){
var weizileft=document.body.clientWidth/2 + document.body.scrollLeft - 250;
document.getElementById('test').style.left =  ...


终于可以了,所有页面都可以实现了。目前来说这个是最好的解答了,非常感谢!

不过,有一个小细节就是,导航是在页面加载完成以后,才会跳到正确的位置,就是感觉不是加载的同时对的位置,JS我是放在head区域的。
回复 支持 反对

使用道具 举报

发表于 2009-7-3 14:29:43 | 显示全部楼层
那你就删掉这句: window.onload=function(){weizi();}
把下面这句加在导航的后面,这样导航一加载完就调用weizi()函数,调整位置,而不是等页面加载完再调整:
<script type="text/JavaScript">weizi();</script>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-3 21:13:18 | 显示全部楼层
原帖由 [i]ccddmm 于 2009-7-3 14:29 发表
那你就删掉这句: window.onload=function(){weizi();}
把下面这句加在导航的后面,这样导航一加载完就调用weizi()函数,调整位置,而不是等页面加载完再调整:
weizi();


恩,非常正确,的确是实现了。再请问一下window.onresize =function(){weizi();}有什么用呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )

GMT+8, 2021-1-22 21:03 , Processed in 0.079749 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表