Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2012, 20:34
Новичок на форуме
Отправить личное сообщение для nuclear_kote Посмотреть профиль Найти все сообщения от nuclear_kote
 
Регистрация: 30.03.2012
Сообщений: 5

Не корректная работа getComputedStyle
Создал такой диалог:

<div id='dialog' style="position:fixed; left:50; top:50; border: 1px solid; box-shadow: 0 5px 10px rgba(0, 0, 0, 0.8); z-index:1000; ">
            <div style="padding: 10px; background: #FFFFFF;">
                <div class="content" id="cont" style="overflow:auto;padding: 5px;height:100%;">HELLO WORLD</div>
                <div style="text-align:right;width:100%;"><img src='s.png' id='res' style="cursor: nwse-resize;"/></div>
            </div>
        </div>

Создал для него скрипт для изменения размеров Как пример кода:
var res = document.getElementById('res');
           res.ondragstart = function() { 
                    return false; 
            };
            res.onmousedown = function (e) {
               var d = document.getElementById('dialog');
               var computedStyle = d.currentStyle || window.getComputedStyle(d, null);
               d.style.height = computedStyle.height;
           }


В итоге при нажатии на рез размер высота диалога скачет вниз пикселей на 20 (только после 1го нажатия) . В чем может быть причина?
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2012, 20:44
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

function getComputed (obj){
	  
	  try{ 
	   return getComputedStyle(obj, null)
	   
	   } catch(e){ 
	      
		  return obj.currentStyle;
		   }
		
		};

или
function getComputed (obj){
    if ( obj.ownerDocument && obj.ownerDocument.defaultView ) {
        return obj.ownerDocument.defaultView.getComputedStyle( obj, null );
    } else if ( obj.currentStyle ) {
        return obj.currentStyle;
    }
    return null;
}
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2012, 20:46
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

я бы вместо
var computedStyle = d.currentStyle || window.getComputedStyle(d, null);
d.style.height = computedStyle.height;

написал бы d.style.height=d.offsetHeight+'px';
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2012, 23:23
Новичок на форуме
Отправить личное сообщение для nuclear_kote Посмотреть профиль Найти все сообщения от nuclear_kote
 
Регистрация: 30.03.2012
Сообщений: 5

Ни один из выше указанных способов не помог. Какая то проблема с падингами. При отображении они дают почему то меньшую высоту элемента, чем при их подсчете в getComputedStyle. Возможно ли как то решить эту проблему без перебора дочерних элементов или чего нибудь подобного?
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2012, 23:37
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var box = elem.getBoundingClientRect();
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 02.07.2012, 00:24
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от devote Посмотреть сообщение
var box = elem.getBoundingClientRect();
полный вариант
var Obj = {
	
  positX : function (elem){
	
	 var body, html, scrollX, scrollY, box, x = 0, y = 0;	
	 
      box = elem.getBoundingClientRect();
	 
      body = document.body;
		
      html = document.documentElement;
		scrollX = window.pageXOffset || html.scrollLeft || body && body.scrollLeft  || 0;
		
		scrollX = html.scrollLeft || body && body.scrollLeft || 0;
		
		
		
		
		x = box.left + scrollX - (html.clientLeft || body.sclientLeft || 0);
		
	
	return Math.round(x);
	},
	
	positY : function (elem){
	
       var body, html, scrollX, scrollY, box, x = 0, y = 0;	
	  
      box = elem.getBoundingClientRect();
	    body = document.body;
		  html = document.documentElement;
		
		scrollY = window.pageYOffset || html.scrollTop || body && body.scrollTop || 0;
	
		scrollY = html.scrollTop || body && body.scrollTop || 0;
		
		y = box.top + scrollY - (html.clientTop || body.sclientTop || 0);
		
		
		
	
	return Math.round(y);
      
	}
};
Ответить с цитированием
  #7 (permalink)  
Старый 02.07.2012, 21:45
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от nuclear_kote
В итоге при нажатии на рез размер высота диалога скачет вниз пикселей на 20 (только после 1го нажатия) . В чем может быть причина?
У меня ничего не скачет (браузер FF 12). Какой у вас браузер?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Корректная работа калькулятора. Dintra Общие вопросы Javascript 2 09.12.2011 20:35
Программист JavaScript постоянная удалённая работа. moisha Работа 4 26.10.2011 19:52
Постоянная работа / Front-end / Москва kooper Работа 4 29.09.2011 22:06
Aсcodition не корректная работа mycoding Общие вопросы Javascript 1 18.06.2010 20:52
не корректная работа JavaScript в Mazille 3 LiNa Общие вопросы Javascript 0 15.07.2008 14:36