使用js解决由border属性引起的div宽度问题


Posted in Javascript onNovember 26, 2013

下面我们来看一个例程

<script type="text/javascript"> 
var timer 
function stopMove(){ 
clearInterval(timer) 
} 
function startMove(){ 
var div=document.getElementById('ok') 
clearInterval(timer) 
timer=setInterval(function(){ 
ok.style.width=ok.offsetWidth-1+'px' ;//理论上应该是宽度不断减少,但是实际却增长,原因在样式表中的border属性,去掉即可解决 
},20) 
} 
</script> 
<style type="text/css"> 
* {margin: 0;padding:0} 
body {font-size: 14px;line-height: 24px;margin: 0px;padding: 0px;} 
#ok{width:800px;height: 200px;background-color:darkgreen;border: 1px red solid; } 
</style> 
</head> 
<body> 
<div id="ok"></div>

注意看注释,为什么会出现这个现象呢?其实就是由于border引起的,由于ok.style.width指定的是div的宽度,而offsetwidth指的是实际的宽度,包括border宽度。所以这个右边的式子得到的宽度值其实比左边大一个像素,解决办法,每次减去3个像素就可以达到实际减去一个像素的目的。或者用右边也用parseInt(div.style.width),但要修改div如下:
<div id="ok" style="width:200px:></div>

终极方案:用currentstyle或getcomputedstyle来获取属性。
Javascript 相关文章推荐
Javascript Object.extend
May 18 Javascript
jQuery如何防止这种冒泡事件发生
Feb 27 Javascript
js中跨域方法原理详解
Jul 19 Javascript
Immutable 在 JavaScript 中的应用
May 02 Javascript
使用jQuery制作浮动工具栏的实例分享
May 13 Javascript
基于JS实现类似支付宝支付密码输入框
Sep 02 Javascript
微信小程序页面间值传递的两种方法
Nov 26 Javascript
js canvas实现写字动画效果
Nov 30 Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 Javascript
vue不操作dom实现图片轮播的示例代码
Dec 18 Javascript
js+css3实现炫酷时钟
Aug 18 Javascript
Vue左滑组件slider使用详解
Aug 21 Javascript
js 弹出框只弹一次(二次修改之后的)
Nov 26 #Javascript
JS匀速运动演示示例代码
Nov 26 #Javascript
Extjs4中Form的使用之本地hiddenfield
Nov 26 #Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
Nov 26 #Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
Nov 26 #Javascript
JS判断不能为空实例代码
Nov 26 #Javascript
常用的JavaScript验证正则表达式汇总
Nov 26 #Javascript
You might like
资料注册后发信小技巧
2006/10/09 PHP
Discuz! Passport 通行证整合
2008/03/27 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
浅谈Python的文件类型
2016/05/30 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
Python新手学习装饰器
2020/06/04 Python
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
super关键字的用法
2012/04/10 面试题
生产副总岗位职责
2013/11/28 职场文书
生日宴会答谢词
2014/01/09 职场文书
小学生防溺水广播稿
2014/01/12 职场文书
代理商会议邀请函
2014/01/27 职场文书
班级口号大全
2014/06/09 职场文书
团代会邀请函
2015/02/02 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis