晚上随便写了一个demo,要用js通过特定的方式来修改图片的定位,还有width和height等,完成预想的动画。
遇到的问题是:
最开始在.css文件里面设置了图片的position:absolute;left等属性,现在想要把他的left设置为left -=left+temp;即要获取元素的left。
之前没有细想,每次都是$(“img”).style.left就可以了,不过这次alert出来的居然是空字符串。 现在想想 .style获取的应该是标签的style属性,然后依次获取其他子属性。所以.style.只能获取行内样式。。于是想方设法的去搞到.css里面的属性。
深入
怎么才能获取 head中style的css 或者 .css文件中的属性呢?
IE中使用的是obj.currentStyle方法,FF是用的是getComputedStyle 方法。
function getDefaultStyle(obj,attribute){ return obj.currentStyle ? obj.currentStyle[attribute] : document.defaultView.getComputedStyle(obj,false)[attribute]; }
或者:
function getDefault(obj){ return obj.currentStyle ? obj.currentStyle :document.defaultView.getComputedStyle(obj,false); }
例子: 使用javascript更改某个css class的属性…
.orig {
display: none;
}
你想要改变把他的display属性由none改为inline。 解决办法: 在IE里:
document.styleSheets[0].rules[0].style.display = "inline";
在firefox里:
document.styleSheets[0].cssRules[0].style.display = "inline";
讨论: 可以做一个函数来搜索特定名字的style对象:
function getstyle(sname) { for (var i=0;i< document.styleSheets.length;i++) { var rules; if (document.styleSheets[i].cssRules) { rules = document.styleSheets[i].cssRules; } else { rules = document.styleSheets[i].rules; } for (var j=0;j< rules.length;j++) { if (rules[j].selectorText == sname) { return rules[j].style; } } } }
然后只要:
getstyle(".orig").display = "inline";
总结:
前面说的是怎样查询或修改外链的.css,不过,不行的是,我们不能这样做。 在ie和firefox里面确实可以实现,不过我们不提倡。
在chrome里面的cssRules会是null,stackoverflow里面说的是跨域,不过也不存在吧,。 所以,最好的方式还是直接修改dom里面的属性。
弄了一晚上,算是弄得比较明白了。有些细节要去追究一下,才能得到更多的东西。虽然自己想要的没有得到,不过却可以得到很多收获。