在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 動態(tài)加載的css導(dǎo)致js控制的元素?zé)o法居中

動態(tài)加載的css導(dǎo)致js控制的元素?zé)o法居中

/*a.css的代碼*/
*{margin:0;padding:0;}
.dialog{
        width: 380px;
        height: auto;
        position: absolute;z-index: 9000;
        background: #38f;
        color:#333;
    }
/*加載a.css文件*/
var cssNode = document.createElement('link');
cssNode.rel = 'stylesheet';
cssNode.type = 'text/css';
cssNode.media = 'screen';
cssNode.href = 'a.css?t='+new Date().getTime();
document.head.appendChild(cssNode);
/*使元素居中*/
function gocenter(ele){
var bodyW=document.documentElement.clientWidth
var bodyH=document.documentElement.clientHeight
var elW=ele[0].offsetWidth
var elH=ele[0].offsetHeight
ele[0].style.left=(bodyW-elW)/2+'px'
ele[0].style.top=(bodyH-elH)/2+'px'
}
/*調(diào)用代碼*/
$('body').append('<div class="dialog">測試是否居中</div>')
gocenter($('.dialog'))
//可以居中setTimeout(function(){gocenter($('.dialog'))},0)

問題是:
如果直接用gocenter($('.dialog'))的話,元素?zé)o法居中,但是只要用了setTimeout就可以居中了.
我還發(fā)現(xiàn),如果直接調(diào)用gocenter($('.dialog')),那么獲取出來的元素offsetWidth的值是屏幕寬度,但我明明已經(jīng)先append,然后再調(diào)用的gocenter方法,應(yīng)該來說是同步的代碼,為何還是獲取不到真實(shí)的元素寬度?從而導(dǎo)致整個元素?zé)o法居中

回答
編輯回答
故林

你要是用js加載css是異步操作,它會掛起,你直接寫這個gocenter($('.dialog')),a.css還沒加載進(jìn)來,你獲取不到寬度,自然居中不了.
你用settimeout 也是使用異步,放到線程里,它會加載完a.css 在設(shè)置位置,就會有效果.

2017年2月9日 20:25
編輯回答
不舍棄

剛才用promise,先用js加載a.css,然后在then里面執(zhí)行g(shù)ocenter(),結(jié)果還是無法居中....
有沒有不用setTimeout的方法,從而實(shí)現(xiàn)居中呢?

2017年6月10日 14:11