Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   При повороте устройства не каждый раз элемент меняет заданные стили (https://javascript.ru/forum/jquery/64516-pri-povorote-ustrojjstva-ne-kazhdyjj-raz-ehlement-menyaet-zadannye-stili.html)

Роман Андреевич 17.08.2016 06:14

При повороте устройства не каждый раз элемент меняет заданные стили
 
Уважаемые коллеги, доброго времени суток.

Встал вопрос, при создании плагина jquery просмотра картинок на сайте, как отследить поворот экрана или смену ориентации устройства.

Суть в следующем, при клике на картинку она всплывает либо height = 100% либо width = 100%. Все работает отлично на всех устройствах от 320px до бесконечности. НО!!!

Смотрю я его работу на iphone 4s (на самом деле не важно на каком), и если я разворачиваю картинку и меняю ориентацию она не адаптируется под новые размеры. Помогает закрыть и открыть заново картинку. Но это я думаю не правильно. Хотя если честно просмотрел кучу плагинов jquery и у 99% есть такой недочет. Ну да ладно.

Суть вопроса к знатокам. Может кто то пробовал решать подобную проблему именно методами jquery и без использования jq_mobile и т.д.

Буду благодарен, за помощь

Роман Андреевич 17.08.2016 06:16

<!DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
	<title>Foto preview v_2</title>
	<script type="text/javascript" src="js/jquery.js"></script>
	<style>
		* {margin: 0;padding: 0;box-sizing: border-box;}
		img {display: block;width: 100%;position: absolute;left: 50%;top:50%;transform: translate(-50%,-50%);}
		html, body {width: 100%;height: 100%;}
	</style>
</head>
<body>
	<img src="gallery/60.jpg" alt="">

	<script>
		$(document).ready(function() {

			function changeImgSize() {

				var $win_width = $(window).width(),
					$win_height = $(window).height(),
					$img_preview = $("img"),
					$img_width = $img_preview.width(),
					$img_height = $img_preview.height();
				

				if ($win_width < $win_height) {
					
					elementFullWidth($img_preview);

				} else if ($win_width > $win_height) {

					elementFullHeight($img_preview);

				}


			}

			function visibleElement(element) {element.css({"opacity":"1"});}
			function invisibleElement(element) {element.css({"opacity":"0"});}
			function elementFullHeight(element) {element.css({"width":"auto","height":"100" + "%"});}
			function elementFullWidth(element) {element.css({"width":"100" + "%","height":"auto"});}
			function elementAutoSize(element) {element.css({"width":"auto","height":"auto"});}

			$(window).on("orientationchange", changeImgSize);
		});
	</script>
</body>
</html>


Вот пример кода

рони 17.08.2016 09:23

Роман Андреевич,
может попробовать не ready
$(window).load(function() {

Роман Андреевич 17.08.2016 12:07

Вся суть в том, что изображение уже загружено. И когда его смотришь на телефоне то при повороте оно должно подстраиваться. Вот

рони 17.08.2016 12:20

Роман Андреевич,
может так ? ("orientationchange resize",

Роман Андреевич 17.08.2016 12:46

мучаюсь с условиями. Может тут косяк. Само событие срабатывает. Но картинка вылазит постоянно

Роман Андреевич 17.08.2016 12:49

Короче говоря, событие работает, но картинка не правильно отображается. Вылазит постоянно за пределы viewport

рони 17.08.2016 12:59

Роман Андреевич,
может измерять истинные размеры картинки а не текущие?

рони 17.08.2016 13:03

Роман Андреевич,
$img_width = $img_preview[0].naturalWidth ,
          $img_height = $img_preview[0].naturalHeight;


Часовой пояс GMT +3, время: 22:33.