Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Определить позицию элемента в момент перетаскивания (https://javascript.ru/forum/events/68927-opredelit-poziciyu-ehlementa-v-moment-peretaskivaniya.html)

smart-create 17.05.2017 21:18

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

У меня на странице есть объект с абсолютной позицией и left:0. Я перемещаю его курсором по горизонтали, по средствам draggable. То есть фактически изменяю значения left. Подскажите пожалуйста как я могу получать значения left в момент перетаскивания?

рони 17.05.2017 22:22

smart-create,
draggable jquery?

smart-create 17.05.2017 22:34

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

<script src="assets/js/jquery-ui.min.js"></script>
<script>
$('.scrollX').draggable({
	axis: "x"
})
</script>

рони 17.05.2017 23:02

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>

smart-create 18.05.2017 01:08

Точно.., прошу прощения, я уже 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 Готовые плагины для этой задачи не использовал по нескольким причинам - не хочу утяжелять вес страницы, плагины что я находил плохо работаю с горизонтальной прокруткой, хочу разобраться в этой теме сам

smart-create 18.05.2017 10:25

Утром встал с более имение ясной головой, переписал немного код, получилось вот так (может быть не совсем правильно с точки зрения красоты кода, но работает адекватно):
$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 в мозиле. Сразу после загрузки страницы координата определяются правильно, но стоит проскролить страницу - координата начинает прибавлять к правильному значению сотни а потом и тысячи пикселей...

Есть ли какой то способ обойти эту проблему?

рони 18.05.2017 10:47

smart-create,
https://javascript.ru/forum/jquery/5...tml#post352541
http://javascript.ru/forum/showthrea...486#post322486

smart-create 19.05.2017 01:20

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

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

P.S. На всякий случай, еще ращ прикрепляю ссылку:
http://ru-marketroll.myjino.ru/oleg/

рони 19.05.2017 02:03

Цитата:

Сообщение от smart-create
Помогите пожалуйста

http://nicescroll.areaaperta.com/

рони 19.05.2017 04:11

горизонтальный скролл колёсиком мыши минимальная версия
 
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>


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