Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2014, 22:48   #1
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию Скроллинг страницы "Рукой"

Подскажите пожалуйста как реализовать перемещение по странице курсором, зажимая кнопку мыши и перетаскивая страницу в сторону.
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 30.01.2014, 15:35   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Событие нажатия onmousedown, для тачпадов — ontouchstart,
первым аргументом в обработчик попадает событие со свойствами pageX, pageY, передающих координаты клика/прикосновения, только прикосновение зарывается в массив ивента, это либо touches, либо changedTouches. Собственно для этой задачи надо взять нулевой объект, который выдаст все те же pageX, pageY.
События движения — onmousemove, ontouchmove, обработка аналогична.
Окончание действия: onmouseup, ontouchend. Обработка все та же.
Советую по окончанию убивать слушателей движения и окончания, а при начале их создавать, чтобы лишний раз не грузить оперативу.

Забыл сказать, сама промотка страницы: window.scrollTo(), принимает 2 аргумента, по х и по у, если юзать jQuery, то $('html body').scrollLeft(X).scrollTop(Y);

Вот, нашел свой кусок кода, который двигает ползунок тут (на машинке)
При желании можно адаптировать

Код:
$cc.on('mousedown touchstart',function(e){
    if (e.type === "touchstart") {
      var e = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
    };
    var strt = e.pageX - $(this).offset().left,
        offset = $layout.offset().left,
        before = width*.5,
        crnt = before;
    $('body').on('mousemove touchmove',function(e){
      if (e.type === "touchmove") {
        var e = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
      };
      var current = e.pageX - offset - strt;
      current = Math.min( Math.max(min_d, current), width);
      crnt = current;
      $roller.width(width - current);
      return false;
    });
    $('body').on('mouseup touchend',function(){
      $(this).off('mousemove touchmove');
      $train[0].width(0);
      $train[1].width(0);
      setInterval(function(){
        clearInterval(_timer);
      },200);
    });
    var _timer = setInterval(function(){
      var _train = before-crnt;
      before = crnt;
      if (_train>0) {
        $train[0].width(0);
        $train[1].width(Math.abs(_train));
      } else {
        $train[0].width(Math.abs(_train));
        $train[1].width(0);
      };
    }, 100);
  });
Alar, верни репу!

Последний раз редактировалось Stilet; 30.01.2014 в 18:52.
Naive вне форума Ответить с цитированием
Старый 30.01.2014, 21:17   #3
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Naive, огромное спасибо, что откликнулись, подсказали и даже пример дали. Набросал свою реализацию под свои цели(есть огромная страница и надо её таскать по экрану), пусть коряво, но для третьего дня знакомства с javasсript пойдёт. Вроде бы работает. Пока только для мыши.
Код:
var mX1,mY1; // Координаты касания
var deltaX,deltaY;//Изменение координат
var m_down_flag = false;//Статус кнопки мыши
 
// Зажата клавиша мыши
window.onmousedown = function(e){
	e.preventDefault()
    m_down_flag = true;
    mX1 = e.pageX;
	mY1 = e.pageY; 
    document.body.style.cursor = "move";
	}
	
// Отпущена клавиша мыши
window.onmouseup = function(){
    m_down_flag = false;
	document.body.style.cursor = "auto";
	}

//Тащим страницу
window.onmousemove=function(e){
	if(m_down_flag){//Если кнопка нажата
	deltaX = mX1 - e.pageX;
	deltaY = mY1 - e.pageY;
	window.scrollBy(deltaX,deltaY);
    }
	}
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.

Последний раз редактировалось Че Гевара; 30.01.2014 в 21:20.
Че Гевара вне форума Ответить с цитированием
Старый 31.01.2014, 13:03   #4
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
e.preventDefault()
а клики по странице после этого работают?

П.С. код не плох, особенно для третьего дня знакомства с js, единственное, он обрубает любые другие действия по перетаскиванию. Ну и глобальные переменные ЗЛО, так что это все можно обернуть во врапер
Код:
"use strict"; // по желанию, конечно, но помогает избежать нелепых ошибок наследования
(function(window, undefined){
  // твой код
})(window);
document.body.style используется дважды, можно закешировать. И таки лучше играть со слушателями событий.
Alar, верни репу!

Последний раз редактировалось Naive; 31.01.2014 в 13:10.
Naive вне форума Ответить с цитированием
Старый 31.01.2014, 19:02   #5
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Цитата:
а клики по странице после этого работают?
Если Вы имеете ввиду переходы по ссылкам, то не знаю, не проверял, да они мне в бщем то и не нужны, там конечно будут у страницы доп функции, но я хочу их потом вынести в своё контекстное меню(где-то слышал, что так можно).А в первую очередь страница является картой, и ссылок там не требуется.Главное масштабирование и скролингА если вопрос был про onmousedown, onmouseup, то на них никак не повлияло e.preventDefault()
Цитата:
глобальные переменные ЗЛО, так что это все можно обернуть во врапер
Спасибо, обернул
Цитата:
И таки лучше играть со слушателями событий.
А можн ссылочку где об этом хорошо и понятно расписано, буду разбираться
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04