问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于JavaScript的问题拖拽的问题

发布网友 发布时间:2022-05-16 18:18

我来回答

3个回答

懂视网 时间:2022-05-16 22:40

Javascript拖拽用到的一些关于位置定位的一些参数

在阅读本文之前,请先看一看第一篇文章Javascript拖拽系列文章1之offsetParent属性,因为循序渐进是一个很好的习惯,值得提倡。
好了,看看我们今天的内容吧。
首先让我们先看一看element.offsetLeft属性。
支持的浏览器:Internet Explorer 4.0+,Mozilla 1.0+,Netscape 6.0+,Opera 7.0+,Safari 1.0+
定义:返回一个像素数值,它表示当前元素的左边缘到它的offsetParent属性返回的对象左边缘的偏移量。
句法:
leftDis = element.offsetLeft
offsetLeft属性在Internet Explorer中的实现存在Bug,无论当前元素的offsetParent属性取值如何,它总是以Body元素为参照物来计算offsetLeft。幸运的是,这个Bug在Intern Explorer 8 Beta 1中已经修复。仍然需要注意,IE会从Body元素的Left-Border为标准开始计算OffsetLeft,而其他的浏览器将从Left-Margin开始计算。
测试代码1:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<style type="text/css">
body{
border:1px solid red;
margin-left:0px;
}
#parent{
position:relative;
left:25px;
top:0px;
border:1px solid black;

}
</style>
<script type="text/javascript" language="JavaScript">
function offset_init(){
var pElement = document.getElementById("sonObj");
parentObj = pElement.offsetParent;
var ioffsetLeft=pElement.offsetLeft;

alert(parentObj.tagName);
alert(ioffsetLeft);
}
</script>
</head>
<body onload="offset_init()">
<p id="parent">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<span id="sonObj">测试OffsetParent属性</span>
</p>
</body>
</html>

在IE中,运行这段代码后,会依次弹出两个窗口,分别显示“p”、“437”,分别表示offsetParent和offsetLeft。在下图中,红色边框代表Body元素,黑色边框代表p元素。从而证明即使在IE中,offsetParent不是Body元素,offsetLeft的计算也以Body元素为标准。

图一:在IE7中的结果

在IE 8 Beta 1中这Bug已经被修复,将分别返回“p”,“411”。已经和其他浏览器一样符合了标准。

图二:在IETester中对IE 8 Beta 1的测试结果

注:IETester是一款非常不错的免费网页测试工具,可以代表IE的各个版本来渲染网页。最新版本0.2.3可以在其官方网站http://www.gxlcms.com/ 下载。个人认为每一个WEB开发者都应该拥有一个。
仍然需要注意的是,如果在一个行内标签(作为offsetParent)内嵌入一个标签(作为当前元素),类此如下代码:

<span id="parent">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<p id="sonObj">测试OffsetParent属性</p></span>


将引起混乱,因为各个浏览器的渲染各不相同(WebKit内核浏览器将会把OffsetParent属性指向Body元素,而且IE对OffsetLeft取值不同),在行内标签内嵌入行内标签这种情况下,问题尤为明显(各个浏览器对OffsetLeft属性的取值就都有差异了,无理可循)。
好了,offsetLeft就讲完了,我们继续看offsetTop属性。
支持的浏览器:Internet Explorer 4.0+,Mozilla 1.0+,Netscape 6.0+,Opera 7.0+,Safari 1.0+
定义:
返回一个数值,指明了当前元素的上边缘到其offsetTop属性返回的对象的上边缘的距离。
句法:
topDis = element.offsetTop
前面对于offsetLeft的Bug也存在于offsetTop属性中,同样,这个Bug在IE 8 Beta 1中也已经修复。

图三:在IE7及以下版本中,offsetsetTop属性的Bug。
当然也不要在内联标签内嵌入标签,因为WebKit内核浏览器会错误解释offsetParent属性。
offsetWidth属性
支持的浏览器:Internet Explorer 4.0+,Mozilla 1.0+,Netscape 6.0+,Opera 7.0+,Safari 1.0+
定义:
当前元素的宽度。
句法:
elementWidth = element.offsetWidth
需要指出的是,offsetWidth属性所指的宽度是当前元素的width+padding+border+margin的总和。
offsetHeight属性
支持的浏览器:Internet Explorer 4.0+,Mozilla 1.0+,Netscape 6.0+,Opera 7.0+,Safari 1.0+
定义:
当前元素的高度。
句法:
elementHeight = element.offsetHeight
同样,offsetWidth属性所指的高度是当前元素的Height+padding+border+margin的总和。
以上所说的四个属性再加上上一篇文章的offsetParent属性其实都不是Dom规范的一部分,但是目前的浏览器都实现了它们,这几个属性也是实现Javascript拖拽功能的核心元素。因此一定要深入理解它们。

热心网友 时间:2022-05-16 19:48

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>#div1{width: 100px;height: 100px;background:red;position: absolute;}</style>
<script>
window.onload=function()
{
var oDiv=document.getElementById('div1')
var disX=0;
var disY=0;
var isDrag = false;
oDiv.onmousedown=function(ev)
{
var oEvent=ev||event;
isDrag = true;
disX=oEvent.clientX-oDiv.offsetLeft;
disY=oEvent.clientY-oDiv.offsetTop;
};
oDiv.onmouseup = function(){
isDrag = false;
};
oDiv.onmousemove=function(ev)
{
if(isDrag){
var oEvent=ev||event;
oDiv.style.left=oEvent.clientX-disX+'px';
oDiv.style.top=oEvent.clientY-disY+'px';
}
};
}
</script>
</head>
<body>
<div id="div1"></div>
</body>
</html>

用个变量做标记,检测是否按下鼠标.

热心网友 时间:2022-05-16 21:06

从格式上来说,oDiv.style.top=oEvent.clientY-disY+'px';}后面少了一个}

不过你要想实现拖拽功能,,你的代码有点问题。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 在松岗骑电动车没戴头盔车被拘留,去了松岗交警大队,给了个单让去宝安大队处理,要交多少钱? 在深圳松岗镇怎么坐公交车到宝安区交警大队 家用保险柜哪种好 我在佛山松岗离广州最近的交警大队是哪一个? 深圳市宝安区交警大队松岗中队到石岩怎么走 郑州哪里卖保密柜?质量好一点的 榆皮面饸饹的传说 想知道: 佛山市 黄岐嘉州广场——松岗交警支队公交线路的信息? 洛阳花都保险柜可以去那里订购,售后是在哪里的 松岗交警大队可以办理更换驾驶证吗 缙云土面的起源 树木是有年轮,年轮稀的一面是( )面,年轮密的一面是()面 花都保险柜初始密码 深圳松岗交警大队怎么去 坐车线路 我现在在松岗汽车站附近 深圳松岗交警大队 深圳市松岗交警大队可以办理违章吗 树木是有年轮的年轮稀的一面是什么面年轮密的一面是什么面 深圳松岗交警中队可以交罚款和处理违章吗 花都保密柜怎么打开?知道密码,但是忘了打开方式了?着急! 年轮稀的一面是哪面?密的一面是哪面? 想知道: 深圳市 从深圳沙井中心客运站到松岗交警中队燕罗扣车场怎么坐公交 In the price of和at the price of 的区别 深圳松岗到东莞那个交警大队最近? 松岗交警中队可以驾驶证年审吗 change in the price of a complementary goods 对demand curve 有什么影响 燕川社区到松岗交警大队有直达车吗 福永交警大队站台去宝安区松岗街道红星社区松瑞路26号怎么走? fill in the price tags是什么意思 the means by which a company ensured precision in the prices it offered what is the price of the apples 还是what are the prices of the apples Raising price前面为什麼不加the 英语 帮我 翻译 帮忙做一下阅读题啊,最后翻译一下啦。谢谢! 什么叫匠高无限维度沙扎比 jason,奥迪q7模型鉴赏,人类勤劳与智慧的结晶,充分运用了美学 缤智实车红色+模型蓝色,酷到边际,手感什么的都很棒 法国思想家蒙田曾经说过:“皇帝和鞋匠的灵魂都是用同样的模型铸造的。”这说明 A.人格没有高低贵贱 想要给自己的促销广告配音,不知道哪个app可以? 为什么兵马俑要做成不同的样子?统一一个模型操作起来不是更快吗? 有没有哪个软件能给商场的促销广告配音的?