Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 08.03.2014, 18:05
Аватар для Zuenf
Кандидат Javascript-наук
Отправить личное сообщение для Zuenf Посмотреть профиль Найти все сообщения от Zuenf
 
Регистрация: 27.01.2012
Сообщений: 134

Добавил в 24 строке запрет переноса элементов.
Ответить с цитированием
  #12 (permalink)  
Старый 08.03.2014, 18:10
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от SeMiTr
дальше меняется плавно, хотя мышь не зажата;
Не наблюдаю в Firefox такого бага.
Сообщение от SeMiTr
danik.js, спасибо, но хочется для начала освоить базовый js без надстроек.
Так я тебе и написал код без каких-либо зависимостей. А jQuery для тебя - базовый js? Лучше сначала освоить нативные API браузера работы с DOM и тд. А уж потом обертки вроде jQuery
Сообщение от Zuenf
document.ondragstart = function(){return false;};
А по шапке?! Отменяй лучше mousedown - так будет корректней.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #13 (permalink)  
Старый 08.03.2014, 18:15
Аватар для Zuenf
Кандидат Javascript-наук
Отправить личное сообщение для Zuenf Посмотреть профиль Найти все сообщения от Zuenf
 
Регистрация: 27.01.2012
Сообщений: 134

Сообщение от danik.js
А по шапке?! Отменяй лучше mousedown - так будет корректней.
Убрал.
30 строка добавил.
Ответить с цитированием
  #14 (permalink)  
Старый 08.03.2014, 19:47
Интересующийся
Отправить личное сообщение для SeMiTr Посмотреть профиль Найти все сообщения от SeMiTr
 
Регистрация: 28.11.2013
Сообщений: 12

Спасибо, Zuenf.
danik.js, конечно я имел ввиду jQuery без надстроек (описАлся). А про DOM я читал на этом сайте и более или менее понял (даже примеры делал)
Ответить с цитированием
  #15 (permalink)  
Старый 08.03.2014, 19:53
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сделал опцию сохранения пропорции (жмём Shift в процессе ресайза).
И обертка создается автоматом.
<!DOCTYPE html>
<style>
	.resizeable{
		position: relative;
		display: inline-block;
		overflow: hidden;
		min-width: 16px;
		min-height: 16px;
	}
	.resizeable .resizer{
		position: absolute;
		bottom: 0;
		right: 0;
		width: 16px;
		height: 16px;
		background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAACVBMVEX///9/f38/Pz8NdHQxAAAAAXRSTlMAQObYZgAAAC9JREFUeNpNyDENADAMBLGoY5mESuAFwwOtvPWGG1z1d+xaW9CiQSxBiwY1Clo0D+HwCieH9fp/AAAAAElFTkSuQmCC);
		cursor: se-resize;
	}
</style>

<img width="200" height="193" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/TUX-G2-SVG.svg/610px-TUX-G2-SVG.svg.png" alt="" />

<script>
	function Resizeable(element, preserveAspectRatio) {
		if (!(this instanceof Resizeable))
			return new Resizeable(element, preserveAspectRatio);
		this.top = NaN;
		this.left = NaN;
		this.preserveAspectRatio = Boolean(preserveAspectRatio);
		this.aspectRatio = element.offsetWidth / element.offsetHeight;
		this.element = element;
		this.wrapper = document.createElement('div');
		this.wrapper.className = 'resizeable';
		this.resizer = document.createElement('div');
		this.resizer.className = 'resizer';
		this.resizer.addEventListener('mousedown', this);
		element.parentNode.replaceChild(this.wrapper, element);
		this.wrapper.appendChild(element);
		this.wrapper.appendChild(this.resizer);
	}

	Resizeable.prototype.resize = function(width, height) {
		width = width > 0 ? width : 0;
		height = height > 0 ? height : 0;
		if (this.preserveAspectRatio) {
			if (width > height) {
				width = height * this.aspectRatio;
			} else {
				height = width / this.aspectRatio;
			}
		}
		this.element.style.width = width + 'px';
		this.element.style.height = height + 'px';
	};

	Resizeable.prototype.handleEvent = function(event) {
		switch (event.type) {
			case 'mousedown':
				return this.handleMouseDownEvent(event);
			case 'mousemove':
				return this.handleMouseMoveEvent(event);
			case 'mouseup':
				return this.handleMouseUpEvent(event);
		}
	};

	Resizeable.prototype.handleMouseDownEvent = function(event) {
		if (this.resizer.setCapture)
			this.resizer.setCapture();
		document.addEventListener('mousemove', this);
		document.addEventListener('mouseup', this);
		this.top = event.pageX - this.element.offsetWidth;
		this.left = event.pageY - this.element.offsetHeight;
		event.preventDefault();
	};

	Resizeable.prototype.handleMouseMoveEvent = function(event) {
		this.resize(event.pageX - this.top, event.pageY - this.left);
	};

	Resizeable.prototype.handleMouseUpEvent = function(event) {
		document.removeEventListener('mousemove', this);
		document.removeEventListener('mouseup', this);
		if (this.resizer.releaseCapture)
			this.resizer.releaseCapture();
		this.top = NaN;
		this.left = NaN;
	};

	Resizeable.prototype.setPreserveAspectRatio = function(preserveAspectRatio) {
		if (this.preserveAspectRatio != preserveAspectRatio) {
			this.preserveAspectRatio = preserveAspectRatio;
			this.resize(this.element.offsetWidth, this.element.offsetHeight);
		}
	}

	var resizeable = new Resizeable(document.querySelector('img'), false);
	var shiftKeyListener = function(event) {
		resizeable.setPreserveAspectRatio(event.shiftKey);
	};
	document.addEventListener('keydown', shiftKeyListener);
	document.addEventListener('keyup', shiftKeyListener);
	window.focus();
</script>
__________________
В личку только с интересными предложениями

Последний раз редактировалось danik.js, 08.03.2014 в 21:25.
Ответить с цитированием
  #16 (permalink)  
Старый 08.03.2014, 21:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Сообщение от danik.js
Сделал опцию сохранения пропорции (жмём Shift в процессе ресайза).
И обертка создается автоматом.
подскажи какая пропорция сохраняется
Ответить с цитированием
  #17 (permalink)  
Старый 08.03.2014, 21:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

danik.js,
а понял сначала нажать Shift до ресайза - если в процессе то никак
Ответить с цитированием
  #18 (permalink)  
Старый 08.03.2014, 21:24
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от рони
подскажи какая пропорция сохраняется
Замеряется изначальная.
Сообщение от рони
а понял сначала нажать Shift до ресайза - если в процессе то никак
Да нет. Просто фрейм фокус не получал. Поправил.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с радио кнопками px379 Общие вопросы Javascript 8 29.07.2013 09:30
Регулярные выражения - получение только группы с захватом RUVATA Общие вопросы Javascript 5 12.06.2012 15:44
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12