Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как запретить масштабирование (https://javascript.ru/forum/dom-window/34033-kak-zapretit-masshtabirovanie.html)

Antik0 18.12.2012 16:23

Как запретить масштабирование
 
Добрый день!

Столкнулся с такой проблемой:

Написал приложение на css3, html5 и javascript для тач-экрана под windows 7.
Мешает масштабирование с помощью тач жестов.
Пробовал отменить в IE10, Firefox, Chrome, Opera.
Ничего у меня не получается, они все равно реагируют на жест двумя пальцами уменьшение или увеличение страницы.
Искал события для того чтобы отловить эти жесты, но они то же не ловятся.

Может кто что подскажет начинающему.

Спасибо.

С уважением, Анатолий.

DjDiablo 19.12.2012 01:01

сомневаюсь что можно отловить жесты.

Зато можно отловить изменение размера страницы через resize
window.onresize = function(){
  //При изменениии масштаба/размера окна браузера
  var width = document.documentElement.clientWidth; //Ширина экрана
  var height = document.documentElement.clientHeight; //Высота экрана

  alert(width);
}


1) можно было бы попробывать изменить масштаб браузера обратно, но я хз как это сделать, если и возможно то точно не везде. resizeTo метод вроде есть, впрочем помоему это нето.


2) с другой стороны можно попробывать изменить размер самого html через scale.
http://d3pr5r64n04s3o.cloudfront.net...ml/index8.html

3) есть такая штука window.devicePixelRatio но чо с ней делать на десктопе я хз :)
<script>
// у меня эта сволочь всегда единицу возвращает (проба в хром)
alert( window.devicePixelRatio);
</script>


нужно экспеременитровать однако.

DjDiablo 19.12.2012 01:39

Короче придумал так :)

демо zoom для хром и IE
<body>
    123123
</body>

<script>
document.body.style.zoom="500%";
</script>


а значит при масштабировании можно просто пересчитывать zoom для body. (рабочий пример для хром)

<body>
КУКУ
</body>

<script>
var size = [document.documentElement.clientWidth,document.documentElement.clientHeight];
window.onresize = function(){
	document.body.style.zoom=document.documentElement.clientWidth/size[0];
}

</script>


в ie ширину надо иначе получать, после допиливания должно и для ie подойти
Ну а в браузерах в которых zoom непроканает придётся для body юзать css3 transform:scale.

дальше развлекайтесь сами :)

Antik0 19.12.2012 12:40

Спасибо за совет. Но дело в том, что при тач-масштабировании событие resize не появляется. Это я проверил.

DjDiablo 19.12.2012 13:54

у меня ноут под windows 7поддерживает мультикасание на тачпаде, когда масштабирую двумя пальцами событие срабатывает, недоумеваю почему на тачскрине этого не происходит(тачскрина под рукой нет проверить сорри ). Мне кажется что браузеру пофиг, с тачпадом работает всё на ура.

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

dmitriymar 19.12.2012 14:02

Цитата:

Сообщение от DjDiablo
сомневаюсь что можно отловить жесты.

ловить не нужно-нужно запрещать поведение по умолчанию

DjDiablo 19.12.2012 14:36

может подскаскажешь как :)

если рассуждать в твоём направлении то есть библиотеки для работы с мультитач.
правда все на мобильные платформы, и перспектива их применения на win7 пока мне не ясна.
ссылка на подборку

может пытаться отменить touchmove для мультикасаний через event.preventDefault(), но я хз проверять неначем.

как комбо из двух подходов можно попробывать определение мультитач вместо onresize и масштабировать body как предлагалось в предыдущем посте.

Antik0 20.12.2012 14:39

Спасибо, DjDiablo. Сегодня все попробую и отпишусь.

dmitriymar 21.12.2012 15:20

Цитата:

Сообщение от DjDiablo
может подскаскажешь как

Цитата:

Сообщение от DjDiablo
может пытаться отменить touchmove для мультикасаний через event.preventDefault()

ты сам ответил :) и дальше пишешь контроллер для поведений своих жестов

Antik0 23.12.2012 14:34

Спасибо всем! У меня все получилось. Сегодня протестировал на больших экранах. Кратко:
1. тач-событие onresize срабатывает под IE 10. В safari и opera несрабатывает.
2. на onresize поставил - document.body.style.zoom=document.documentElement. clientHeight/1080;
1080 - высота экрана в пикселях.


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