首页 > web前端 > js教程 > 正文

拖动层效果,兼容IE和FF!

PHP中文网
发布: 2016-05-16 19:23:44
原创
976人浏览过

复制代码 代码如下:


nbsp;html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


    
    
    
    DoDi Chat v1.0 Beta
    
    
    
    <script> <br/> <!-- <br/> function ChatHidden() <br/> { <br/> document.getElementById("ChatBody").style.display = "none"; <br/> } <br/> function ChatShow() <br/> { <br/> document.getElementById("ChatBody").style.display = ""; <br/> } <br/> function ChatClose() <br/> { <br/> document.getElementById("main").style.display = "none"; <br/> } <br/> function ChatSend(obj) <br/> { <br/> var o = obj.ChatValue; <br/> if (o.value.length>0){ <br/> document.getElementById("ChatContent").innerHTML += "<strong>Akon说:"+o.value+"<br/>"; <br/> o.value=&#39;&#39;; <br/> } <br/> } <br/><br/> if (document.getElementById) <br/> { <br/> ( <br/> function() <br/> { <br/> if (window.opera){ document.write("<input type=&#39;hidden&#39; id=&#39;Q&#39; value=&#39; &#39;>"); } <br/><br/> var n = 500; <br/> var dragok = false; <br/> var y,x,d,dy,dx; <br/><br/> function move(e) <br/> { <br/> if (!e) e = window.event; <br/> if (dragok){ <br/> d.style.left = dx + e.clientX - x + "px"; <br/> d.style.top = dy + e.clientY - y + "px"; <br/> return false; <br/> } <br/> } <br/><br/> function down(e) <br/> { <br/> if (!e) e = window.event; <br/> var temp = (typeof e.target != "undefined")?e.target:e.srcElement; <br/> if (temp.tagName != "HTML"|"BODY" && temp.className != "dragclass"){ <br/> temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement; <br/> } <br/> if(&#39;TR&#39;==temp.tagName){ <br/> temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement; <br/> temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement; <br/> temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement; <br/> } <br/><br/> if (temp.className == "dragclass"){ <br/> if (window.opera){ document.getElementById("Q").focus(); } <br/> dragok = true; <br/> temp.style.zIndex = n++; <br/> d = temp; <br/> dx = parseInt(temp.style.left+0); <br/> dy = parseInt(temp.style.top+0); <br/> x = e.clientX; <br/> y = e.clientY; <br/> document.onmousemove = move; <br/> return false; <br/> } <br/> } <br/><br/> function up(){ <br/> dragok = false; <br/> document.onmousemove = null; <br/> } <br/><br/> document.onmousedown = down; <br/> document.onmouseup = up; <br/><br/> } <br/> )(); <br/> } <br/> --> <br/> </script>




    


        -
        +
        x
    


    


        


        


            


            
            
            

        
    





一个拖动效果,根据论坛的一些帖子改的,但还有一些bug一直没法解决,谁能帮我改改?
当第一次拖动层时,层的位置会偏离很远。
呃。。。这涉及到一个style的问题。。。
在ie和firefox中,obj.style这个东西实际上只是取得元素中属性style中的值!
如下例,你会发现style块中的属性一个都取不到!

复制代码 代码如下:



<script> <br/>window.onload=function(){ <br/>var t=document.getElementById(&#39;test&#39;) <br/>var ts=t.style; <br/>t.innerHTML= <br/>"t.style.width:"+ts.width+"<br />"+ <br/>"t.style.backgroundColor:"+ts.backgroundColor+"<br />"+ <br/>"t.style.color:"+ts.color+"<br />"+ <br/>"t.style.paddingLeft:"+ts.paddingLeft <br/>} <br/></script>






看到了没?前两个style 为空,后两个才有值。
如果是ie,问题很好解决,只要把style改成currentStyle即可。
IE Only

复制代码 代码如下:



<script> <br/>window.onload=function(){ <br/>var t=document.getElementById(&#39;test&#39;) <br/>var ts=t.currentStyle; <br/>t.innerHTML= <br/>"t.style.width:"+ts.width+"<br />"+ <br/>"t.style.backgroundColor:"+ts.backgroundColor+"<br />"+ <br/>"t.style.color:"+ts.color+"<br />"+ <br/>"t.style.paddingLeft:"+ts.paddingLeft <br/>} <br/></script>






FF only

eMart 网店系统
eMart 网店系统

功能列表:底层程序与前台页面分离的效果,对页面的修改无需改动任何程序代码。完善的标签系统,支持自定义标签,公用标签,快捷标签,动态标签,静态标签等等,支持标签内的vbs语法,原则上运用这些标签可以制作出任何想要的页面效果。兼容原来的栏目系统,可以很方便的插入一个栏目或者一个栏目组到页面的任何位置。底层模版解析程序具有非常高的效率,稳定性和容错性,即使模版中有错误的标签也不会影响页面的显示。所有的标

eMart 网店系统 0
查看详情 eMart 网店系统

复制代码 代码如下:



<script> <br/>window.onload=function(){ <br/>var t=document.getElementById(&#39;test&#39;) <br/>var ts=document.defaultView.getComputedStyle(t, null); <br/>t.innerHTML= <br/>"t.style.width:"+ts.width+"<br />"+ <br/>"t.style.backgroundColor:"+ts.backgroundColor+"<br />"+ <br/>"t.style.color:"+ts.color+"<br />"+ <br/>"t.style.paddingLeft:"+ts.paddingLeft <br/>} <br/></script>






我绕了半天,你明白你的错误原因了吗?你的style全都是文档级style,而你试图获取left的时候,第一次获得的只是0,自然会把你的框给挪到边上去了。

最终效果

复制代码 代码如下:


nbsp;html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


  
  
  
  DoDi Chat v1.0 Beta
  
  
  
  <script> <br/> <!-- <br/> function $(d){return document.getElementById(d);} <br/> function gs(d){var t=$(d);if (t){return t.style;}else{return null;}} <br/> function gs2(d,a){ <br/> if (d.currentStyle){ <br/> var curVal=d.currentStyle[a] <br/> }else{ <br/> var curVal=document.defaultView.getComputedStyle(d, null)[a] <br/> } <br/> return curVal; <br/> } <br/> function ChatHidden(){gs("ChatBody").display = "none";} <br/> function ChatShow(){gs("ChatBody").display = "";} <br/> function ChatClose(){gs("main").display = "none";} <br/> function ChatSend(obj){ <br/> var o = obj.ChatValue; <br/> if (o.value.length>0){ <br/> $("ChatContent").innerHTML += "<strong>Akon说:"+o.value+"<br/>"; <br/> o.value=&#39;&#39;; <br/> } <br/> } <br/><br/> if (document.getElementById){ <br/> ( <br/> function(){ <br/> if (window.opera){ document.write("<input type=&#39;hidden&#39; id=&#39;Q&#39; value=&#39; &#39;>"); } <br/><br/> var n = 500; <br/> var dragok = false; <br/> var y,x,d,dy,dx; <br/><br/> function move(e) <br/> { <br/> if (!e) e = window.event; <br/> if (dragok){ <br/> d.style.left = dx + e.clientX - x + "px"; <br/> d.style.top = dy + e.clientY - y + "px"; <br/> return false; <br/> } <br/> } <br/><br/> function down(e){ <br/> if (!e) e = window.event; <br/> var temp = (typeof e.target != "undefined")?e.target:e.srcElement; <br/> if (temp.tagName != "HTML"|"BODY" && temp.className != "dragclass"){ <br/> temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement; <br/> } <br/> if(&#39;TR&#39;==temp.tagName){ <br/> temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement; <br/> temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement; <br/> temp = (typeof temp.parentNode != "undefined")?temp.parentNode:temp.parentElement; <br/> } <br/><br/> if (temp.className == "dragclass"){ <br/> if (window.opera){ document.getElementById("Q").focus(); } <br/> dragok = true; <br/> temp.style.zIndex = n++; <br/> d = temp; <br/> dx = parseInt(gs2(temp,"left"))|0; <br/> dy = parseInt(gs2(temp,"top"))|0; <br/> x = e.clientX; <br/> y = e.clientY; <br/> document.onmousemove = move; <br/> return false; <br/> } <br/> } <br/><br/> function up(){ <br/> dragok = false; <br/> document.onmousemove = null; <br/> } <br/><br/> document.onmousedown = down; <br/> document.onmouseup = up; <br/><br/> } <br/> )(); <br/> } <br/> --> <br/> </script>




  


    -
    +
    x
  


  


    


    


      


      
      
      

    
  





附解决问题的过程:
1、首先debug,看表现,就知道是在第一次点击的时候,对象的左右边距出错,变成0
2、找到代码中对应位置,输出left和top
3、知道原因,我之前已经知道currentStyle的效果,所以我不需要去网络上搜索相关资料
4、但是我不知道在firefox下如何处理
5、我在google里直接搜索“currentStyle firefox”,很快就找到符合我目的的信息
6、测试通过,发帖子。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号