Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.10.2010, 13:21
2de 2de вне форума
Аспирант
Отправить личное сообщение для 2de Посмотреть профиль Найти все сообщения от 2de
 
Регистрация: 26.10.2010
Сообщений: 78

Выделение нескольких узлов
Интересует следующее решение:

Есть страничка на ней расположены рисунки, необходимо организовать массовое выделение рисунков (как например файлы в винде), как это лучше сделать если возможно?
Ответить с цитированием
  #2 (permalink)  
Старый 26.10.2010, 13:28
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Например сделать специальный класс в ЦСС и присвоить этот класс всем выделеным картинкам... Т.о. они будут визуально выглядеть отмечеными.
Ответить с цитированием
  #3 (permalink)  
Старый 26.10.2010, 13:32
2de 2de вне форума
Аспирант
Отправить личное сообщение для 2de Посмотреть профиль Найти все сообщения от 2de
 
Регистрация: 26.10.2010
Сообщений: 78

Это да, но перед этим же нужно выделить как то эти объекты дабы присвоить им этот класс.
Ответить с цитированием
  #4 (permalink)  
Старый 26.10.2010, 13:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Про условия выборки ты не писал...
Ответить с цитированием
  #5 (permalink)  
Старый 26.10.2010, 13:57
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Разметка:

<div id='images'>
	<img src='…' />
	<img src='…' />
	<img src='…' />
</div>


javascript:

document.getElementById("images").onclick = function (event) {
	var target = (event = event || window.event);
	if (/\bselected\b/.test(target.className))
		target.className = target.className.replace(/\bselected\b/, "");
	else
		target.className += " selected";
};


Выделенное изображение будет иметь класс selected.
Ответить с цитированием
  #6 (permalink)  
Старый 26.10.2010, 15:00
2de 2de вне форума
Аспирант
Отправить личное сообщение для 2de Посмотреть профиль Найти все сообщения от 2de
 
Регистрация: 26.10.2010
Сообщений: 78

Может быть я не совсем точно изложил суть того чего я хочу.

Мне нужно выделить объекты скопом не кликая по каждому. Тоесть делаю так кликаю в верхнем левом углу и начинаю тянуть мышку в нижний правый угол. В итоге id всех объектов которые лежат в регионе который я очертил дожны будут заполнены в массив.

Кликать по каждому отдельно не хочется.
Ответить с цитированием
  #7 (permalink)  
Старый 26.10.2010, 15:58
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Есть кое-какие наработки:

<html>
<body>
<script type="text/javascript">

var T, L, A = [], C = false;

document.onmousedown = function (event) {
	T = event.pageY;
	L = event.pageX;
	document.onmousemove = function (evt) {
		var rect = document.createElement("DIV"),
		X = evt.pageX, Y = evt.pageY;
		A[A.length] = rect;
		rect.style.position = "absolute";
		rect.style.top = Y > T ? T : Y;
		rect.style.left = X > L ? L : X;
		if (C)
			rect.style.border = "1px solid #555555";
		else
			rect.style.backgroundColor = "#555555";
		rect.style.height = Math.abs(Y - T);
		rect.style.width = Math.abs(X - L);
		if (A[A.length - 2]) document.body.removeChild(A[A.length - 2]);
		document.body.appendChild(rect);
	};
	return false;
};
document.onmouseup = function () {
	A = [];
	document.onmousemove = new Function;
};

</script>
</body>
</html>


Дальше сами или за доплату.
Ответить с цитированием
  #8 (permalink)  
Старый 26.10.2010, 16:09
2de 2de вне форума
Аспирант
Отправить личное сообщение для 2de Посмотреть профиль Найти все сообщения от 2de
 
Регистрация: 26.10.2010
Сообщений: 78

У меня такая же идея была, по дауну узнавать сорс елемента на котором кликнули, а после апа сорс на котором закончили дальше найти найти координаты этих объектов и все остальные проверить на попадание в эту область. Вот только это мне показалось очень длинным решением. А за код спасибо пригодится.

Вот нашел реализацию на jquery http://jqueryui.com/demos/selectable/#display-grid только не хочется его использовать слишком громоздкий код получится.
Ответить с цитированием
  #9 (permalink)  
Старый 26.10.2010, 18:50
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

<html>
<head>
<title>
Selectable
</title>
</head>
<style type='text/css'>
	#images img {
		margin: 10px;
	}
</style>
<body>
<div id='images'>
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<br />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<br />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<br />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<br />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
<img src='http://s7.ucoz.net/img/fr/ic/11/br_new.gif' />
</div>

<script type="text/javascript">

var T, L, A = [], C = true, F = document.getElementById("images").getElementsByTagName("IMG");

function fix(event) {
	event = event || window.event;
	if ( !event.pageX || !event.pageY ) {
		var html = document.documentElement, body = document.body;
		event.pageX = event.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
		event.pageY = event.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
	}
	if ( !event.target ) event.target = event.srcElement;
	return event;
}

function opacity(object, value) {
	if (document.all && !window.opera)
		object.style.filter = "alpha(opacity=" + (value * 100) + ")";
	else
		object.style.opacity = value;
}

function getOffset(element) {
	var offsetLeft = 0, offsetTop = 0;
	do {
		offsetLeft += element.offsetLeft;
		offsetTop  += element.offsetTop;
	} while (element = element.offsetParent)
	return {
		top: offsetTop,
		left: offsetLeft
	}
}

function each(object, handler) {
	for (var i = 0; i < object.length; i++)
		handler.call(object[i]);
}

each(F, function () {
	var offset = getOffset(this);
	this.top = offset.top, this.left = offset.left;
});

document.onmousedown = function (event) {
	event = fix(event);
	if (event.target.parentNode.id != "images")
		each(F, function () {
			opacity(this, 1);
		});
	else
		each(F, function () {
			opacity(this, 1);
		}),
		opacity(event.target, 0.5);
	A = [];
	T = event.pageY;
	L = event.pageX;
	document.onmousemove = function (evt) {
		evt = fix(evt);
		var rect = document.createElement("DIV"),
		X = evt.pageX, Y = evt.pageY;
		A[A.length] = rect;
		rect.style.position = "absolute";
		rect.style.top = Y > T ? T : Y;
		rect.style.left = X > L ? L : X;
		if (C)
			rect.style.border = "1px solid #555555";
		else
			rect.style.backgroundColor = "#555555";
		rect.style.height = Math.abs(Y - T);
		rect.style.width = Math.abs(X - L);
		rect.className = "rect";

		var images = document.getElementById("images").getElementsByTagName("IMG");
		for (var i = 0; i < images.length; i++) {
			if ( X > L && Y > T )
				var condition = images[i].top > T && images[i].top < Y && images[i].left > L && images[i].left < X;
			if ( X < L && Y < T )
				var condition = images[i].top < T && images[i].top > Y && images[i].left < L && images[i].left > X;
			if ( X < L && Y > T )
				var condition = images[i].top > T && images[i].top < Y && images[i].left < L && images[i].left > X;
			if ( X > L && Y < T )
				var condition = images[i].top < T && images[i].top > Y && images[i].left > L && images[i].left < X;
			if ( condition )
				opacity(images[i], 0.5);
			else
				opacity(images[i], 1);
		}

		if (A[A.length - 2]) document.body.removeChild(A[A.length - 2]);
		document.body.appendChild(rect);
		return false;
	};
	return false;
};
document.onmouseup = document.onclick = function () {
	each(document.getElementsByTagName("DIV"), function () {
		if (this.className == "rect")
			document.body.removeChild(this);
	});
	document.onmousemove = new Function;

};

</script>
</body>
</html>


А так?
Ответить с цитированием
  #10 (permalink)  
Старый 26.10.2010, 18:55
2de 2de вне форума
Аспирант
Отправить личное сообщение для 2de Посмотреть профиль Найти все сообщения от 2de
 
Регистрация: 26.10.2010
Сообщений: 78

Нажал запустить появилось окошко но в нем не выделяются ниодин из рисунков в 2х правых столбцах, а на самом деле то что нужно, спасибо.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение текста в текстовом поле. Как снять выделение с пробела вконце? Roman Koff Events/DOM/Window 10 01.07.2010 16:48
Как убрать выделение в Опере у div, получившего фокус ? spa_2002 Opera, Safari и др. 5 03.09.2009 10:42
Выделение одиночных тэгов Pattern Events/DOM/Window 7 26.05.2009 23:29
поменять цвет у нескольких строк в таблице Root Элементы интерфейса 4 21.04.2008 10:30