html如下
`
<style>
/* body {
margin: 0;
}
*/
.buttoncon {
height: 100px;
}
.control {
display: block;
float: left;
width: 120px;
height: 40px;
line-height: 40px;
text-align: center;
margin: 40px 20px 0 20px;
border: 1px solid black;
}
.moveleft {
width: 200px;
height: 200px;
background: lightgreen;
position: relative;
left: -200px;
}
</style>
<body>
<div class="buttoncon">
<div class='control' onmouseover='moveleft(document.getElementsByClassName("moveleft")[0],0)' onmouseout='moveleft(document.getElementsByClassName("moveleft")[0],-200)'>moveleft</div>
</div>
<div class="moveleft"></div>
</body>
`
js如下
var timer;
function moveleft(ele, target) {
clearInterval(timer);
var speed = (target - ele.offsetLeft) / 50;
timer = setInterval(function() {
if (
(speed > 0 && ele.offsetLeft >= target) ||
(speed < 0 && ele.offsetLeft <= target)
) { clearInterval(timer);
return;
}
ele.style.left = ele.offsetLeft + speed + "px";
}, 20);
}
在body沒(méi)將margin設(shè)置為0之前,鼠標(biāo)移出.control時(shí), .moveleft會(huì)持續(xù)向右移動(dòng),而不是設(shè)想的向左移動(dòng)。在ie下測(cè)試也一樣。調(diào)試發(fā)現(xiàn)各個(gè)變量也沒(méi)問(wèn)題。
但是body的margin設(shè)置為0之后,就是正常的。有人知道這是什么原因造成的嗎?
首頁(yè)在我瀏覽器里,不加margin:0的話,body默認(rèn)的margin為8,不同瀏覽器可能結(jié)果不一樣,但是原因是一樣的。
你不加margin:0,導(dǎo)致body有個(gè)body,這個(gè)時(shí)候,你的moveleft盒子的offsetLeft和left是兩個(gè)不相等的值的,當(dāng)你的left為0的時(shí)候,你的offsetLeft是為8的。因?yàn)檫@個(gè)offsetLeft把body的margin也算進(jìn)去了。moveleft盒子結(jié)束移動(dòng)條件是offsetLeft>=0。
這個(gè)時(shí)候,你第一次移開(kāi)鼠標(biāo),offsetLeft=0,left=-8.16。注意,這個(gè)時(shí)候speed為-4,moveleft盒子第一次移動(dòng),left=0+-4 = -4。此時(shí),盒子是向右移動(dòng)了4個(gè)單位,那么offsetLeft=4。
第二次移動(dòng),left=4-4=0。此時(shí),盒子再向又移動(dòng)4個(gè)單位,那么offsetLeft=8。
如此循環(huán),offsetLeft是只會(huì)越來(lái)越大的,這樣的話,就不滿足if語(yǔ)句,這樣就會(huì)一直移動(dòng)下去了。
重點(diǎn)是因?yàn)椴患觤argin:0,moveleft盒子的offsetLeft和left是兩個(gè)不相等的值的。這就導(dǎo)致了邏輯上出現(xiàn)錯(cuò)誤。
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。