JavaScript中无法通过div.style.left获取值的解决方法


Posted in Javascript onFebruary 19, 2017

一、问题总结:

    样式必须直接写在元素内部才能通过div.style.left直接获取属性值(也就是必须是内联样式才行),定义在css中的样式不能通过这种方式获取。

   让元素移动到200停止

setTimeout ( function () {  
  var div = document.getElementById("div4");
  //var left = parseInt(div.style.left) + 5;
  var left = div.offsetLeft + 5;
  
  div.style.left = left + "px";
  if (left < 200) {
    setTimeout( arguments.callee, 50);
  }
  
}, 50);

二、关于offsetLeft和left的区别(关于offsetLeft:https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/offsetLeft)

   1.定义了position:relative或absolute属性的元素才有left属性,元素都有offsetLeft属性。

   2.元素内联样式中设置了left,才能通过div.style.left获取;offsetLeft直接通过div.offsetLeft获取。

   3.left可读可写,获取到的是字符串;offsetLeft只读,获取到的是数字。

  相同点:定位方式一样,如果父元素设置了定位元素(position设置为relative或absolute),则相对于定位元素定位,否则就是相对于根元素定位。

三、案例:

    HTMLElement.offsetParent 是一个只读属性,返回一个指向最近的(closest,指包含层级上的最近)包含该元素的定位元素。如果没有定位的元素,则 offsetParent 为最近 的 table 元素对象或根元素(标准模式下为 html;quirks 模式下为 body)。当元素的 style.display 设置为 "none" 时,offsetParent 返回 null。offsetParent 很有用,因为 offsetTop 和 offsetLeft 都是相对于其内边距边界的。

    下面的span的父元素没有设置定位元素,所以该元素的offsetParent为根元素,此时的offsetTop相对于根元素定位。

<div style="width: 300px; border-color:blue;
 border-style:solid; border-width:1;">
 <span>Short span. </span>
 <span id="long">Long span that wraps withing this div.</span>
 </div>
<div id="box" style="position: absolute; border-color: red;
 border-width: 1; border-style: solid; z-index: 10">
</div>
<script>
 var box = document.getElementById("box");
 var long = document.getElementById("long");
 //
 // long.offsetLeft这个值就是span的offsetLeft.
 // span是个行内元素,它没有没absolute定位,但还是默认offserParent就是父元素,而不是根
 //
 box.style.left = long.offsetLeft + document.body.scrollLeft + "px";
 box.style.top = long.offsetTop + document.body.scrollTop + "px";
 box.style.width = long.offsetWidth + "px";
 box.style.height = long.offsetHeight + "px";
</script>

JavaScript中无法通过div.style.left获取值的解决方法

如果给long的父元素添加一个定位属性,结果如下:

JavaScript中无法通过div.style.left获取值的解决方法

 四、总结:

   javascript中通过offsetLeft(offsetTop)方法获取元素偏移值很方便,得到的是数值;改变元素的偏移值使用style.left(top、right、bottom),通过style.left获取的是一个字符串的值,如果要通过style.left来改变元素位置,先要通过parseInt将获取到的当前left值转化为数值。

以上所述是小编给大家介绍的JavaScript中无法通过div.style.left获取值的解决方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言。

Javascript 相关文章推荐
js onload处理html页面加载之后的事件
Oct 30 Javascript
js图片实时加载提供网页打开速度
Sep 11 Javascript
用原生js做个简单的滑动效果的回到顶部
Oct 15 Javascript
javascript Deferred和递归次数限制实例
Oct 21 Javascript
javascript实现可拖动变色并关闭层窗口实例
May 15 Javascript
不想让浏览器运行javascript脚本的方法
Nov 20 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
May 12 Javascript
bootstrap 通过加减按钮实现输入框组功能
Nov 15 Javascript
Webpack框架核心概念(知识点整理)
Dec 22 Javascript
微信小程序实现折叠面板
Jan 31 Javascript
vue中v-text / v-html使用实例代码详解
Apr 02 Javascript
JQuery的加载和选择器用法简单示例
May 13 jQuery
JS获取浮动(float)元素的style.left值为空的快速解决办法
Feb 19 #Javascript
Angular 输入框实现自定义验证功能
Feb 19 #Javascript
js实现九宫格的随机颜色跳转
Feb 19 #Javascript
原生JS实现垂直手风琴效果
Feb 19 #Javascript
js鼠标移动时禁止选中文字
Feb 19 #Javascript
canvas雪花效果核心代码分享
Feb 19 #Javascript
Ajax和Comet技术总结
Feb 19 #Javascript
You might like
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
js 浏览器事件介绍
2012/03/30 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
原生js实现旋转木马轮播图效果
2017/02/27 Javascript
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
2018/05/15 NodeJs
js数据类型检测总结
2018/08/05 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
如何高效使用Python字典的方法详解
2017/08/31 Python
全面分析Python的优点和缺点
2018/02/07 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
SQL Server面试题
2016/10/17 面试题
汽车检测与维修个人求职信
2013/09/24 职场文书
客服工作职责
2013/12/11 职场文书
个人贷款收入证明
2014/10/26 职场文书
优秀党员推荐材料
2014/12/18 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python
Python first-order-model实现让照片动起来
2022/06/25 Python