Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.03.2013, 00:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

newbie7,
Вариант...
<!DOCTYPE html>
<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
        <title>Прикольный виджет</title>
        <style type="text/css">
            .lupe {
                border: gray 4px solid;
                width: 200px;
                height: 200px;
                position: absolute;
                background-repeat: no-repeat;
                background-color: white;
                border-radius: 200px;
            }
        </style>
    </head>

    <body>
        <img id="image" src="http://4.bp.blogspot.com/-PaPJ6ulqi9c/Tf1-QMenB1I/AAAAAAAAADs/U_31Ap2LIjA/s1600/novye-interesnye-fotografii-ot-national-geographic-4.jpg" alt="" width="400">
        <img id="image2" src="http://2.bp.blogspot.com/-Edrn-TiDZlw/UPha3ogDR1I/AAAAAAAAA9s/esDb0tWcCdA/s1600/DSC06442.JPG" alt="" width="400">
        <script type="text/javascript">
            var Imgt = function (id) {
                if (!(this instanceof Imgt)) {
                    return new Imgt(id);
                }
                this.element = document.getElementById(id);
                this.addEvent('mouseover', Imgt.createLupe);
                this.addEvent('mouseout', Imgt.deleteLupe);
                this.addEvent('mousemove', Imgt.shower);
            };
            Imgt.pss = !1;
            Imgt.coords;
            Imgt.lupe = document.createElement('div');
            Imgt.createLupe = function () {
                var lupe = Imgt.lupe;
                lupe.className = 'lupe';
                document.getElementsByTagName('body')[0].appendChild(lupe);
                lupe.style.backgroundImage = 'url(' + this.src + ')';
                Imgt.coords = this.getBoundingClientRect()
            };
            Imgt.deleteLupe = function () {
                var lupe = Imgt.lupe;
                lupe.parentNode.removeChild(lupe);
            };
            Imgt.shower = function (e) {
                if (Imgt.pss) return;
                Imgt.pss = !0;
                window.setTimeout(function () {
                    Imgt.pss = !1
                }, 40)
                var lupe = Imgt.lupe,
                    event = e || window.event,
                    eX = event.x || event.clientX,
                    eY = event.y || event.clientY,
                    y = -(eY - Imgt.coords.top) * 4 + 100 + 'px',
                    x = -(eX - Imgt.coords.left) * 4 + 100 + 'px';
                lupe.style.top = 10 + eY + 'px';
                lupe.style.left = 10 + eX + 'px';
                lupe.style.backgroundPosition = x + ' ' + y;
            };
            Imgt.prototype.addEvent = function (event, handler) {
                var element = this.element;
                if (element.addEventListener) {
                    return element.addEventListener(event, handler);
                } else if (element.attachEvent) {
                    return element.attachEvent('on' + event, handler);
                }
            };
            var i = new Imgt('image');
            var i2 = new Imgt('image2');
        </script>
    </body>
</html>
Ответить с цитированием
  #12 (permalink)  
Старый 13.03.2013, 17:22
Аватар для newbie7
Новичок на форуме
Отправить личное сообщение для newbie7 Посмотреть профиль Найти все сообщения от newbie7
 
Регистрация: 15.10.2012
Сообщений: 5

Сообщение от dmitriymar
архитектура -нет
говнокод -да
базовые оптимизации -нет
Вот как раз это мне и было интересно, только я не додумался так спросить). Самому очень трудно понять правильно сделал или нет, особенно когда есть много вариантов и все вроде бы работают так как планировал. Может вы мне каких нибудь задач или упражнений дадите на развитие понимания архитектуры приложений. А то вот например с объектами: вроде и понимаю как они устроены, как прототипное наследование осуществляется и тд и тп, а как правильно и куда лучше их применить, а куда нет не знаю.

Сообщение от dmitriymar
собрал бы всё в модуль
накинул бы наблюдатель ,и при заходе на изображение помеченное, классом , атрибутом ... включал бы лупу
а не создавал бы явно для каждого изображения объект
<!DOCTYPE html>
<html>

<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
	<title>Прикольный виджет</title>
	<style type="text/css">
		.lupe {
			border: gray 4px solid;
			width: 200px;
			height: 200px;
			position: absolute;
			background-repeat: no-repeat;
			background-color: white;
			border-radius: 200px;
		}
	</style>
</head>

<body>
<img id="image" class="lup" src="http://4.bp.blogspot.com/-PaPJ6ulqi9c/Tf1-QMenB1I/AAAAAAAAADs/U_31Ap2LIjA/s1600/novye-interesnye-fotografii-ot-national-geographic-4.jpg" alt="" width="400">
<img id="image2" class="lup" src="http://2.bp.blogspot.com/-Edrn-TiDZlw/UPha3ogDR1I/AAAAAAAAA9s/esDb0tWcCdA/s1600/DSC06442.JPG" alt="" width="400">
<script type="text/javascript">
	(function (cls) {

		var handl = {
				mouseover: function (obj) {
					lupe.className = 'lupe';
					document.getElementsByTagName('body')[0].appendChild(lupe);
					lupe.style.backgroundImage = 'url(' + obj.src + ')';
					var coords = obj.getBoundingClientRect();
					top = coords.top * 4 + 100;
					left = coords.left * 4 + 100;
				},
				mouseout: function () {
					lupe.parentNode.removeChild(lupe);
				},
				mousemove: function (e) {
					if(time.count){
						return;
					}
					time.count = true;
					time.out = setTimeout(function() {
						time.count = false;
					}, 50);
					var event = e || window.event,
						eX = event.x || event.clientX,
						eY = event.y || event.clientY,
						y = -eY*4 + top + 'px',
						x = -eX*4 + left + 'px';
					lupe.style.top = 10 + eY + 'px';
					lupe.style.left = 10 + eX + 'px';
					lupe.style.backgroundPosition = x + ' ' + y;
				}
		};

		var lupe = document.createElement('div'),
			elements = document.getElementsByClassName(cls),
			time = {
				count: false
			},
			top,
			left;

		for(var i = 0; i < elements.length; i++) {
			elements[i].onmouseover = function () {handl.mouseover(this)};
			elements[i].onmouseout = function () {handl.mouseout()};
			elements[i].onmousemove = function (e) {handl.mousemove(e)};
		}

	})('lup');

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

Вторая работа над ошибками.

Последний раз редактировалось newbie7, 13.03.2013 в 18:40.
Ответить с цитированием
  #13 (permalink)  
Старый 13.03.2013, 17:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

newbie7, на всякий случай
в тег html можно добавить run
возможностях форматирования - читайте http://javascript.ru/formatting.
наблюдателя можно на боди поставить и смотреть над каким элементом курсор и какой его класс.
http://learn.javascript.ru/mousemove-events
Ответить с цитированием
  #14 (permalink)  
Старый 16.03.2013, 20:54
Новичок на форуме
Отправить личное сообщение для kindx Посмотреть профиль Найти все сообщения от kindx
 
Регистрация: 16.03.2013
Сообщений: 5

Могешь, парень)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Введенный код в prompt() falsenull Общие вопросы Javascript 8 21.05.2012 16:47
помогите пожалуйста улучшить код. Duda.Ml1986@gmail.com Серверные языки и технологии 4 07.01.2012 20:53
Типографика и HTML код Manjuriano (X)HTML/CSS 3 23.11.2011 12:22
Пожалуйста, объясните что мне сделать с этим... someLogin Events/DOM/Window 2 16.10.2011 22:47
Почему не работатет код?! WitaliG Ваши сайты и скрипты 5 17.08.2010 09:30