Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Cкролл элементов по горизонтали? (https://javascript.ru/forum/dom-window/38157-ckroll-ehlementov-po-gorizontali.html)

AfraidAlex 21.05.2013 20:10

Cкролл элементов по горизонтали?
 
Всем привет! Только учу JS и задался таким вопросом! А как сделать горизонтальный скролл элементов (допустим слайдер) захватом мыши? Ну нажимаем и ведем, наш слайдер скроллится, пока мы не отпустим мышь или не прекратим mousemove'ить :)

Вот, что я смог (горизонтальный скрол колесиком мыши):

<style>
#catalog{
    position: absolute;
    width: 3150px;
    height: 100%;
    overflow-y: hidden;
    z-index:5000;
}
.project{
    width: 350px;
    height: 100%;
    background-repeat: no-repeat;
    float: left;
    list-style: none;
}
.project a{
    display: block;
    width: 100%;
    height: 100%;
	text-decoration:none;
}
</style>

<body>

<ul id="catalog">
        
        <li class="project" style="background-image: url(images/1r.png);">
            <a href="#"> 
            </a>
        </li>

        <li class="project" style="background-image: url(images/2r.png);">
            <a href="#">
            </a>
        </li>
        
        <li class="project" style="background-image: url(images/3r.png);">
            <a href="#">
            </a>
        </li>

        <li class="project" style="background-image: url(images/1r.png);">
            <a href="#">
            </a>
        </li>

        <li class="project" style="background-image: url(images/2r.png);">
            <a href="#">
            </a>
        </li>

        <li class="project" style="background-image: url(images/3r.png);">
            <a href="#">
            </a>
        </li>

        <li class="project" style="background-image: url(images/1r.png);">
            <a href="#">
            </a>
        </li>
        <li class="project" style="background-image: url(images/2r.png);">
            <a href="#">
            </a>
        </li>
</ul>

<script>
$("body, html").mousewheel(function(event, scr) {
		this.scrollLeft -= (scr * 70);
		event.preventDefault();
})
var hov=false;
$("#catalog ul li a").mouseup( hov = true );
$("#catalog ul li a").mousedown( hov = false );
alert(hov);

$("#catalog ul li a").mousemove(function() {
if (hov) {/* как же описать эту функцию, которая двигает? */}
})
</script>

</body>


Пишу пока в большинстве на jQuery, мало знаний для чистого JS, а jQuery облегчает.

dmitriymar 21.05.2013 20:13

Здравствуйте!

Судя по вашему сообщению, вы ну совсем не знаете javascript.

Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.

На сайте javascript можно начать изучать с учебника, раздел Основы javascript.
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/

Задавайте конкретные вопросы по ходу дела.

AfraidAlex 21.05.2013 20:17

dmitriymar,
Я не спорю, я пока чайник. Но всетаки, в какую мне сторону идти? Я как раз таки хочу попробовать все по очереди. Но меня очень заинтересовал именно этот вопрос. Потому что сайтов с таким скроллом очень мало, а решение реально интересное.
HTML я знаю идеально, но нужно развиваться

dmitriymar 21.05.2013 20:24

Цитата:

Сообщение от AfraidAlex
Но всетаки, в какую мне сторону идти?

в сторону изучить сначала что можно, как можно а потом делать, а не скажите мне какую функцию сюда -она не маленькая по размеру, и должна учитывать множество факторов в том числе небольшие движения мыши не обрабатывать и т.д , а есть ещё интерактив элементов страницы....

Цитата:

Сообщение от AfraidAlex
Но меня очень заинтересовал именно этот вопрос. Потому что сайтов с таким скроллом очень мало, а решение реально интересное.

В чём ? Здесь и адаптивная вёрстка, и непривычный пользователю интерфейс и .... Да и решение это для мобильных платформ. И вовсе не значит что для десктопов оно подходит. Колёсиком мыши проще и естественнее листать вниз-вверх чем вправо-влево и это интуитивно. в то время как на мобильных платформах интуитивно и естественно вправо влево

AfraidAlex 21.05.2013 20:33

Цитата:

Сообщение от dmitriymar (Сообщение 251978)
в сторону изучить сначала что можно, как можно а потом как делать, а не скажите мне какую функцию сюда -она не маленькая по размеру, и должна учитывать множество факторов в том числе небольшие движения мыши не обрабатывать и т.д .

Я перерыл полгугла на поиски моих вопросов.. У меня есть логика функции и я пытаюсь её реализовать, но ничего не выходит. Вот и думал, что тут подскажут. Я не прошу функцию, я прошу меня направить. Я никогда не любил читать много непонятного текста, я человек практики. Если я захотел - сделаю, но сейчас я зашел в тупик.

dmitriymar 21.05.2013 20:42

Цитата:

Сообщение от AfraidAlex
У меня есть логика функции и я пытаюсь её реализовать, но ничего не выходит. Вот и думал, что тут подскажут. Я не прошу функцию, я прошу меня направить. Я никогда не любил читать много непонятного текста, я человек практики. Если я захотел - сделаю, но сейчас я зашел в тупик.

Вот честно, я не вижу абсолютно никакой реализации . Вижу 3 строки навески обработчиков и всё и никакой реализации. Причём обработчики навешаны на ссылку(что будете делать когда курсор выйдет за её пределы?) , в то время как должны быть на документ или див. Ссылка блочная в ли , в то время как должны блоки информации двигаться -это 3 див причём с позиционированием один за пределами экрана слева(стопка дивов) , второй по экрану и третий(стопка дивов) справа от экрана . Вижу только 3 строки ничего не имеющих с реализацией общего.
И кстати, информации как это реализовывать море.
по моему Яндес на последнем вебминаре это вообще по косточкам разжевал

А что будете делать с адресами страниц для поисковиков, а что если контент "страницы не будет вмещаться в блок? -масштаб уменьшать до не читаемости?
А что будете делать с динамической подгрузкой страниц?
А что будете делать с ...?

AfraidAlex 21.05.2013 21:06

Цитата:

Сообщение от dmitriymar (Сообщение 251984)
Вот честно, я не вижу абсолютно никакой реализации . Вижу 3 строки навески обработчиков и всё и никакой реализации. Причём обработчики навешаны на ссылку(что будете делать когда курсор выйдет за её пределы?) , в то время как должны быть на документ или див. Ссылка блочная в ли , в то время как должны блоки информации двигаться -это 3 див причём с позиционированием один за пределами экрана слева(стопка дивов) , второй по экрану и третий(стопка дивов) справа от экрана . Вижу только 3 строки ничего не имеющих с реализацией общего.
И кстати, информации как это реализовывать море.
по моему Яндес на последнем вебминаре это вообще по косточкам разжевал

А что будете делать с адресами страниц для поисковиков, а что если контент "страницы не будет вмещаться в блок? -масштаб уменьшать до не читаемости?
А что ...?

Я нарисую такой макет, который будет вмещаться:)
Не поверите, посмотрел полностью последний вебинар яндекса... Но.. )

По идее при клике на ссылку должен происходить скролл на 70.. Но его не происходит.. Не понимаю почему

$('#catalog li a').click(function() {
		$('body, html').scrollLeft-=70;
		return false;
});

AfraidAlex 21.05.2013 21:15

Сорри, неправильно повесил обработчик. Наверно, показался совсем дураком в ваших глазах

$('#catalog li a').click(function() {
		$('body, html').animate({scrollLeft: '+=10'});
		return false;
	});

AfraidAlex 21.05.2013 22:29

Что-то получилось, ездит, но ужасно и с багами.. Почему окошко иногда прыгает, а иногда нормально захватывается?

var hov=false, t=0;
	$("#catalog li a").mousedown(function(e) {
		hov=true		
		t = e.pageX; // начальная координата по Х
	}).mouseup(function(e) {
		hov=false		
		t = 0;
	}).click(function(){return false});
	$("#catalog li a").mousemove(function(e) {
		if (hov) {
		$('body, html').scrollLeft(t-e.pageX); // нач координата - конечн
		}
	})



UPD как можно отключить "перетаскивание" элементов в браузере? Допустим картинку можно вывести на рабочий стол, а мне нужно двигать элемент

dmitriymar 21.05.2013 22:44

Цитата:

Сообщение от AfraidAlex
Что-то получилось, ездит, но ужасно и с багами.. Почему окошко иногда прыгает, а иногда нормально захватывается?

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


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