Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.05.2017, 21:18
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

Определить позицию элемента в момент перетаскивания
Добрый вечер! Обращаюсь за помощью, потому как гугл мне не помог(

У меня на странице есть объект с абсолютной позицией и left:0. Я перемещаю его курсором по горизонтали, по средствам draggable. То есть фактически изменяю значения left. Подскажите пожалуйста как я могу получать значения left в момент перетаскивания?
Ответить с цитированием
  #2 (permalink)  
Старый 17.05.2017, 22:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

smart-create,
draggable jquery?
Ответить с цитированием
  #3 (permalink)  
Старый 17.05.2017, 22:34
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

да, да совершенно верно.

<script src="assets/js/jquery-ui.min.js"></script>
<script>
$('.scrollX').draggable({
	axis: "x"
})
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 17.05.2017, 23:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

smart-create,
в документации даже пример есть того, что вы просите
http://api.jqueryui.com/draggable/#event-drag

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  #draggable { width: 150px; height: 150px; padding: 0.5em; }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
  <script>
$(function() {
 $( "#draggable" ).draggable({ axis: "x",
    drag: function( event, ui ) {
    $( "#draggable" ).html(ui.offset.left); // ui.position.left 
    }
  });
});
  </script>
</head>

<body>
<div id="draggable" class="ui-widget-content">

  <p>Drag me around</p>

</div>

</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 18.05.2017, 01:08
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

Точно.., прошу прощения, я уже 18 часов в js с головой, видимо мозг закоптило, я не заметил. Спасибо

Если Вас не затруднит хотел бы попросить посмотреть на плод моей работы за день. Я основываясь на этой теме сделал на странице "лже" скрол, то есть стандартный скрыл, создал обобьет равный по размеру полосе прокрутки и скриптами связал его положение с прокруткой страницы, что бы можно было стилизовать скролл кросбраузерно.

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

Ссылка на страницу

Мой "лже" скррол - горизонтальная полоса прокрутки в низу страницы, сиреневая со скругленными углами

Скрипты которые я использовал:
$window.on('load', function() {

	var $width = $(document).width() / $(window).width(),
		$coef_widht = $(window).width() / $width,
		$scroll = $(document).scrollLeft();

	$('.scrollX').css({
		width: $coef_widht,
		left: $scroll + $(window).width() / ($(document).width() / $scroll)
	});

	$(document).scroll(function() {
		var $scroll = $(document).scrollLeft();
		$('.scrollX').css({
			width: $coef_widht,
			left: $scroll + $(window).width() / ($(document).width() / $scroll)
		});
	})

	$('.scrollX').draggable({
		axis: "x",
		containment: "html",
		drag: function( event, ui ) {
		        $(document).scrollLeft(ui.offset.left - $(window).width() / ($(document).width() / ui.offset.left));
	        }
	)
});


P.S. Заранее благодарен
P.P.S Готовые плагины для этой задачи не использовал по нескольким причинам - не хочу утяжелять вес страницы, плагины что я находил плохо работаю с горизонтальной прокруткой, хочу разобраться в этой теме сам
Ответить с цитированием
  #6 (permalink)  
Старый 18.05.2017, 10:25
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

Утром встал с более имение ясной головой, переписал немного код, получилось вот так (может быть не совсем правильно с точки зрения красоты кода, но работает адекватно):
$window.on('load', function() {
	var $width = $(document).width() / $(window).width(),
		$coef_widht = $(window).width() / $width,
		$scroll = $(document).scrollLeft();

	$('.scrollX').css({
		width: $coef_widht,
		left: $scroll + $(window).width() / ($(document).width() / $scroll)
	});

	$(document).scroll(function() {
		$scroll = $(document).scrollLeft();
		$('.scrollX').css({
			width: $coef_widht,
			left: $scroll + $(window).width() / ($(document).width() / $scroll)
		});
	})

	$('.scrollX').draggable({
		axis: "x",
		containment: "html",
		drag: function( event, ui ) {
			$scroll = $(document).scrollLeft();
			$(document).scrollLeft(ui.offset.left - (($scroll / $(window).width()) * $coef_widht ));
		 }
	})
});


Я сказал что работает адекватно, но не везде, в мозиле проблемы, на сколько я понял проблемы уже не в моем скрипте, а в самой draggable jquery в мозиле. Сразу после загрузки страницы координата определяются правильно, но стоит проскролить страницу - координата начинает прибавлять к правильному значению сотни а потом и тысячи пикселей...

Есть ли какой то способ обойти эту проблему?
Ответить с цитированием
  #7 (permalink)  
Старый 18.05.2017, 10:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

smart-create,
https://javascript.ru/forum/jquery/5...tml#post352541
http://javascript.ru/forum/showthrea...486#post322486
Ответить с цитированием
  #8 (permalink)  
Старый 19.05.2017, 01:20
Профессор
Отправить личное сообщение для smart-create Посмотреть профиль Найти все сообщения от smart-create
 
Регистрация: 25.10.2016
Сообщений: 157

Спасибо! Сделал все так как Вы показали в одном из примеров. В мозиле скрол стал работать корректно, по отношению к тому что было раньше. А сейчас ползунок скрола просто перестает бегать за нами в момент прокручивания страницы вниз ( то есть в моем случае вправо), а если прокручивать вверх (у меня влево), то все ок.

Смотрел на код уже больше 6 часов и не могу понять как мне исправить эту ошибку, Помогите пожалуйста

P.S. На всякий случай, еще ращ прикрепляю ссылку:
http://ru-marketroll.myjino.ru/oleg/
Ответить с цитированием
  #9 (permalink)  
Старый 19.05.2017, 02:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от smart-create
Помогите пожалуйста
http://nicescroll.areaaperta.com/
Ответить с цитированием
  #10 (permalink)  
Старый 19.05.2017, 04:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

горизонтальный скролл колёсиком мыши минимальная версия
smart-create,

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
  <script>
$(function() {
    var a = p = 50,
        b = $(window).width() - p - $(".slider").width();
    $(".scroll-bar").slider({
        max: p,
        min: b,
        value: b,
        slide: function(k, d) {
                a = b - d.value + p;
            $(".slider").css({
                left: a
            })
        }
    });
    $(window).on("mousewheel DOMMouseScroll", function(c) {
        c.preventDefault();
        a += c.originalEvent.wheelDelta || 40 * -c.originalEvent.detail;
        a > p && (a = p);
        a < b && (a = b);
        $("p").html(b - a);
        $(".scroll-bar").slider("option", "value", b - a + p);
        $(".slider").stop().animate({
            left: a
        }, 600)
    }).on("resize", function() {
        a = p;
        b = $(window).width() - p - $(".slider").stop().animate({
                left: a
            },
            600).width();
        $(".scroll-bar").slider("option", "min", b);
        $(".scroll-bar").slider("option", "value", b)
    })
});
  </script>
 <style type="text/css">html,body{
   height:100%;
 }

 body{
   overflow:hidden;
   position:relative;
 }

 .slider{
   left:50px;
   position:absolute;
   height:200px;
   width:2990px;
   background-color:hsla(51,100%,50%,1);
 }

 .slider img{
   height:200px;
   padding:0;
 }

 .scroll-bar{
   position:absolute;
   left:0;
   top:calc(100vh - 16px);
   width:calc(100vw - 60px);
 }

 .ui-slider-horizontal{
   height:0px;
 }

 .ui-slider-horizontal .ui-slider-handle{
   top:-4px;
   background:#0000FF;
   width:56px;
   border-radius:8px;
   height:8px;
 }

 :focus{
   outline:0;
   border:0;
 }
 </style>


</head>

<body>
<div class="slider">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
</div>
<div class="scroll-bar"></div>
</body>
</html>

Последний раз редактировалось рони, 19.05.2017 в 10:20.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить позицию выделенного элемента n00de Элементы интерфейса 6 28.02.2012 00:57
Браузер не успевает определить высоту вновь созданного через XMLHttpRequest элемента Lockpickup AJAX и COMET 17 25.04.2011 17:58
Как менять позицию элемента? Заданую через position:absolute; left:100px; top:200px; aRpi Общие вопросы Javascript 3 24.04.2011 08:42
помогите "уловить" момент появления элемента Bebarr Swallow Events/DOM/Window 4 18.03.2011 08:16
как определить позицию элемента относительно окна scuter Events/DOM/Window 5 07.05.2008 18:47