Javascript.RU

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

Изображение в hmtl-документе двигается не так, как было задумано
Приведу полный код ниже. Изображение должно двигаться так, чтобы пользователь при работе на странице всегда видел изображение, задний фон страницы за изображением виден быть не должен. То есть, границы координат изображения от 0 до ширинаОкна - ширинаИзображения и от 0 до длинаОкна - длинаИзображения
Может, я не так понял, какими должны быть минимальные и максимальные координаты изображения? Помогите, пожалуйста, понять, почему не работает, как должно.
<html>
	<head>
		<meta charset="utf-8">
		<style>
			#map {
				position: fixed;
				left: 0; top: 0;
			}
		</style>
	</head>
	<body style="overflow: hidden">
		<img id ="map" src="big.jpg"></img>
		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
		<script>
			//скрипт перемещения и масштабирования изображения
			//1)перемещение
			var lastMouseX = 0, lastMouseY = 0; //координаты мыши при предыдущем вызове mousemove
			var imgX = $("#map").offset().left; //координаты левого верхнего края изображения
			var imgY = $("#map").offset().top;
			var minX = ($(window).width()-document.getElementById("map").offsetWidth); //минимальные координаты изображения
			var minY = ($(window).height()-document.getElementById("map").offsetHeight); //ширинаОкна - ширинаИзображения и длинаОкна - длинаИзображения
			$("#map").mousemove(function(event){
				var currentMouseX = event.pageX; //текущие координаты мыши
				var currentMouseY = event.pageY;
				var moveByX = currentMouseX-lastMouseX; //разница между текущими и предыдущими координатами мыши
				var moveByY = currentMouseY-lastMouseY; //т.е. перемещение мыши
				if((imgX+moveByX)<=0 && (imgX+moveByX)>=minX) {
					//если новый X изображения <= 0 и >= минимальному иксу, увеличить старый икс до нового
					imgX+=moveByX;
				}
				if((imgY+moveByY)<=0 && (imgY+moveByY)>=minY) {
					//если новый Y изображения <= 0 и >= минимальному Y, увеличить старый Y до нового
					imgY+=moveByY;
				}
				//задать изображению новые координаты
				$("#map").offset({left: imgX, top: imgY});
				lastMouseY = currentMouseY; //старые координаты мыши = новые
				lastMouseX = currentMouseX;
			});
		</script>
	</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 08.08.2017, 22:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

CodeMonk3y,
<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="utf-8">
    <style>
      #map {
        position: fixed;
        left: 0; top: 0;
      }
    </style>
  </head>
  <body style="overflow: hidden">
    <img id ="map" src="http://www.nationalgeographic.com/content/dam/travel/rights-exempt/Travel-2016/59-parks-52-weeks/sequoia/giant-tree-trail-sequoia-national-park.jpg"></img>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>
    $(window).on("load", function() {
//скрипт перемещения и масштабирования изображения
      //1)перемещение
      var lastMouseX = 0, lastMouseY = 0; //координаты мыши при предыдущем вызове mousemove
      $("#map").mousemove(function(event){
      var imgX = $("#map").offset().left; //координаты левого верхнего края изображения
      var imgY = $("#map").offset().top;
      var minX = ($(window).width()-document.getElementById("map").offsetWidth); //минимальные координаты изображения
      var minY = ($(window).height()-document.getElementById("map").offsetHeight); //ширинаОкна - ширинаИзображения и длинаОкна - длинаИзображения

        var currentMouseX = event.pageX; //текущие координаты мыши
        var currentMouseY = event.pageY;
        var moveByX = currentMouseX-lastMouseX; //разница между текущими и предыдущими координатами мыши
        var moveByY = currentMouseY-lastMouseY; //т.е. перемещение мыши
        if((imgX+moveByX)<=0 && (imgX+moveByX)>=minX) {
          //если новый X изображения <= 0 и >= минимальному иксу, увеличить старый икс до нового
          imgX+=moveByX;
        }
        if((imgY+moveByY)<=0 && (imgY+moveByY)>=minY) {
          //если новый Y изображения <= 0 и >= минимальному Y, увеличить старый Y до нового
          imgY+=moveByY;
        }
        //задать изображению новые координаты
        $("#map").offset({left: imgX, top: imgY});
        lastMouseY = currentMouseY; //старые координаты мыши = новые
        lastMouseX = currentMouseX;
      });
})

    </script>
  </body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 08.08.2017, 23:03
Новичок на форуме
Отправить личное сообщение для CodeMonk3y Посмотреть профиль Найти все сообщения от CodeMonk3y
 
Регистрация: 16.07.2017
Сообщений: 7

Сообщение от рони Посмотреть сообщение
CodeMonk3y,
<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="utf-8">
    <style>
      #map {
        position: fixed;
        left: 0; top: 0;
      }
    </style>
  </head>
  <body style="overflow: hidden">
    <img id ="map" src="http://www.nationalgeographic.com/content/dam/travel/rights-exempt/Travel-2016/59-parks-52-weeks/sequoia/giant-tree-trail-sequoia-national-park.jpg"></img>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>
    $(window).on("load", function() {
//скрипт перемещения и масштабирования изображения
      //1)перемещение
      var lastMouseX = 0, lastMouseY = 0; //координаты мыши при предыдущем вызове mousemove
      $("#map").mousemove(function(event){
      var imgX = $("#map").offset().left; //координаты левого верхнего края изображения
      var imgY = $("#map").offset().top;
      var minX = ($(window).width()-document.getElementById("map").offsetWidth); //минимальные координаты изображения
      var minY = ($(window).height()-document.getElementById("map").offsetHeight); //ширинаОкна - ширинаИзображения и длинаОкна - длинаИзображения

        var currentMouseX = event.pageX; //текущие координаты мыши
        var currentMouseY = event.pageY;
        var moveByX = currentMouseX-lastMouseX; //разница между текущими и предыдущими координатами мыши
        var moveByY = currentMouseY-lastMouseY; //т.е. перемещение мыши
        if((imgX+moveByX)<=0 && (imgX+moveByX)>=minX) {
          //если новый X изображения <= 0 и >= минимальному иксу, увеличить старый икс до нового
          imgX+=moveByX;
        }
        if((imgY+moveByY)<=0 && (imgY+moveByY)>=minY) {
          //если новый Y изображения <= 0 и >= минимальному Y, увеличить старый Y до нового
          imgY+=moveByY;
        }
        //задать изображению новые координаты
        $("#map").offset({left: imgX, top: imgY});
        lastMouseY = currentMouseY; //старые координаты мыши = новые
        lastMouseX = currentMouseX;
      });
})

    </script>
  </body>
</html>
спасибо, но это не помогло
ну это все хорошо,но картинка 4000*6000 пикселей все равно не двигается до краев, как должно быть
Ответить с цитированием
  #4 (permalink)  
Старый 08.08.2017, 23:15
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

var currentMouseX = event.pageX*5; //текущие координаты мыши
var currentMouseY = event.pageY*5;

а если добавить *5 или сколько нужно.
Ответить с цитированием
  #5 (permalink)  
Старый 08.08.2017, 23:17
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="utf-8">
    <style>
      #map {
        position: fixed;
        left: 0; top: 0;
      }
    </style>
  </head>
  <body style="overflow: hidden">
    <img id ="map" src="http://www.nationalgeographic.com/content/dam/travel/rights-exempt/Travel-2016/59-parks-52-weeks/sequoia/giant-tree-trail-sequoia-national-park.jpg"></img>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>
    $(window).on("load", function() {
//скрипт перемещения и масштабирования изображения
      //1)перемещение
      var lastMouseX = 0, lastMouseY = 0; //координаты мыши при предыдущем вызове mousemove
      $("#map").mousemove(function(event){
      var imgX = $("#map").offset().left; //координаты левого верхнего края изображения
      var imgY = $("#map").offset().top;
      var minX = ($(window).width()-document.getElementById("map").offsetWidth); //минимальные координаты изображения
      var minY = ($(window).height()-document.getElementById("map").offsetHeight); //ширинаОкна - ширинаИзображения и длинаОкна - длинаИзображения

        var currentMouseX = event.pageX*5; //текущие координаты мыши
        var currentMouseY = event.pageY*5;
        var moveByX = currentMouseX-lastMouseX; //разница между текущими и предыдущими координатами мыши
        var moveByY = currentMouseY-lastMouseY; //т.е. перемещение мыши
        if((imgX+moveByX)<=0 && (imgX+moveByX)>=minX) {
          //если новый X изображения <= 0 и >= минимальному иксу, увеличить старый икс до нового
          imgX+=moveByX;
        }
        if((imgY+moveByY)<=0 && (imgY+moveByY)>=minY) {
          //если новый Y изображения <= 0 и >= минимальному Y, увеличить старый Y до нового
          imgY+=moveByY;
        }
        //задать изображению новые координаты
        $("#map").offset({left: imgX, top: imgY});
        lastMouseY = currentMouseY; //старые координаты мыши = новые
        lastMouseX = currentMouseX;
      });
})

    </script>
  </body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 08.08.2017, 23:20
Новичок на форуме
Отправить личное сообщение для CodeMonk3y Посмотреть профиль Найти все сообщения от CodeMonk3y
 
Регистрация: 16.07.2017
Сообщений: 7

Сообщение от j0hnik Посмотреть сообщение
var currentMouseX = event.pageX*5; //текущие координаты мыши
var currentMouseY = event.pageY*5;

а если добавить *5 или сколько нужно.
да, работает. но появляется проблема в скорости движения изображения - теперь оно двигается слишком быстро. в гугл картах скорость приятная, а в моем html-доке слишком высокая
Ответить с цитированием
  #7 (permalink)  
Старый 08.08.2017, 23:25
Новичок на форуме
Отправить личное сообщение для CodeMonk3y Посмотреть профиль Найти все сообщения от CodeMonk3y
 
Регистрация: 16.07.2017
Сообщений: 7

Сообщение от j0hnik Посмотреть сообщение
<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="utf-8">
    <style>
      #map {
        position: fixed;
        left: 0; top: 0;
      }
    </style>
  </head>
  <body style="overflow: hidden">
    <img id ="map" src="http://www.nationalgeographic.com/content/dam/travel/rights-exempt/Travel-2016/59-parks-52-weeks/sequoia/giant-tree-trail-sequoia-national-park.jpg"></img>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>
    $(window).on("load", function() {
//скрипт перемещения и масштабирования изображения
      //1)перемещение
      var lastMouseX = 0, lastMouseY = 0; //координаты мыши при предыдущем вызове mousemove
      $("#map").mousemove(function(event){
      var imgX = $("#map").offset().left; //координаты левого верхнего края изображения
      var imgY = $("#map").offset().top;
      var minX = ($(window).width()-document.getElementById("map").offsetWidth); //минимальные координаты изображения
      var minY = ($(window).height()-document.getElementById("map").offsetHeight); //ширинаОкна - ширинаИзображения и длинаОкна - длинаИзображения

        var currentMouseX = event.pageX*5; //текущие координаты мыши
        var currentMouseY = event.pageY*5;
        var moveByX = currentMouseX-lastMouseX; //разница между текущими и предыдущими координатами мыши
        var moveByY = currentMouseY-lastMouseY; //т.е. перемещение мыши
        if((imgX+moveByX)<=0 && (imgX+moveByX)>=minX) {
          //если новый X изображения <= 0 и >= минимальному иксу, увеличить старый икс до нового
          imgX+=moveByX;
        }
        if((imgY+moveByY)<=0 && (imgY+moveByY)>=minY) {
          //если новый Y изображения <= 0 и >= минимальному Y, увеличить старый Y до нового
          imgY+=moveByY;
        }
        //задать изображению новые координаты
        $("#map").offset({left: imgX, top: imgY});
        lastMouseY = currentMouseY; //старые координаты мыши = новые
        lastMouseX = currentMouseX;
      });
})

    </script>
  </body>
</html>
да, все работает. ну а вы бы как решали эту задачу? может, есть еще какие-то способы?
Ответить с цитированием
  #8 (permalink)  
Старый 08.08.2017, 23:25
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

так сделайте *3 в чем проблема
Ответить с цитированием
  #9 (permalink)  
Старый 08.08.2017, 23:28
Новичок на форуме
Отправить личное сообщение для CodeMonk3y Посмотреть профиль Найти все сообщения от CodeMonk3y
 
Регистрация: 16.07.2017
Сообщений: 7

Сообщение от j0hnik Посмотреть сообщение
так сделайте *3 в чем проблема
не достаточно, нет возможности подвинуть изображение так, чтобы был виден его нижний и левый края, если ставить *3
Ответить с цитированием
  #10 (permalink)  
Старый 08.08.2017, 23:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

CodeMonk3y,
понять бы что вы хотите сделать?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как с помощью PHP сохранить какие-либо изменения в HTML документе? FirstFrost Общие вопросы Javascript 1 15.07.2010 17:12
Как с помощью JavaScript сохранить какие-либо изменения в HTML документе? FirstFrost Общие вопросы Javascript 1 15.07.2010 16:23
Как заставить браузер использовать закэшированное изображение? fog Общие вопросы Javascript 5 13.08.2009 15:40
Как изменить скрипт, что бы им его можно было использовать для нужной страницы Nick50_70 Общие вопросы Javascript 0 28.04.2009 23:30