Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.02.2015, 11:21
Интересующийся
Отправить личное сообщение для arcmag Посмотреть профиль Найти все сообщения от arcmag
 
Регистрация: 06.02.2015
Сообщений: 29

Создание своей собственной прокрутки для блока
Всем привет. Вот периодически натыкаюсь на сайтах на различные колонки новостей у которых имеется ограниченная высота но для которых есть возможность прокрутки содержимого.
Конечно подобное легко делается при помощи такой штуки как overflow:scroll; но внеше выглядит не очень приятно. А что если я хочу допустим в качестве ползунка использовать какой нибудь смайлик, картинку или еще что то? Вот и решил сделать свой скрипт на прокрутку содержимого внутри блока.
То есть у меня есть блок обертка с ограниченной высотой и свойством overflow:hidden; и блок с содержимым который находится внутри и высота которого превышает высоту блока обертки.
Саму идею реализовать вроде бы удалось, но теперь возник вопрос об улучшении.
Вот код, а дальше вопрос по улучшению:
var wrapper, block, scrollBlock, scrollicon, nowMouse, nowMouse2, nowMouse3, testVar;
var point = false;
var point2 = false;
window.onload = function(){
	wrapper = document.getElementsByClassName("wrapper").item(0);
	block = document.getElementsByClassName("block").item(0);
	scrollBlock = document.getElementsByClassName("scrollBlock").item(0);
	scrollicon = document.getElementsByClassName("scrollicon").item(0);
	test_scroll();
	scrollicon.onmousedown = icon_scroll_down;
	document.onmouseup = function(){point=false;}
	document.onmousemove = icon_scroll_move;
}
function test_scroll(){ // проверка высоты блока
	if(block.offsetHeight>wrapper.offsetHeight){ 
		scrollBlock.style.display = "block"; scrollicon.style.display = "block";
		scrollBlock.style.height = block.offsetHeight+"px";
	}
	else{
		scrollBlock.style.display = "none"; scrollicon.style.display = "none";
	}
}
function icon_scroll_down(e){ //функция активации ползунка
	nowMouse = e.clientY-scrollicon.offsetTop; point=true; test_out();
}
function icon_scroll_move(e){ //функция движения ползунка
	if(point){
		e.preventDefault();
		e.stopPropagation();
		scrollicon.style.top = (e.clientY - nowMouse)+"px";
		if(scrollicon.offsetTop<0){ scrollicon.style.top=0; }
		else if(scrollicon.offsetTop>wrapper.offsetHeight-scrollicon.offsetHeight)
		scrollicon.style.top=(wrapper.offsetHeight-scrollicon.offsetHeight)+"px";
		var nowMouse3 = wrapper.offsetHeight-scrollicon.offsetHeight
		var wrapperPercent = nowMouse3/100;
		var blockPercent = (block.offsetHeight-nowMouse3)/100;
		nowMouse2 = (scrollicon.offsetTop/wrapperPercent).toFixed(2);
		block.style.marginTop = -(nowMouse2*blockPercent).toFixed(0)+"px";
		testVar = block.style.marginTop;
		test_out();
	}
}

$(function(){
	$('.wrapper').bind('mousewheel', function(event) {
	event.preventDefault();
	testVar = this.offsetHeight;
	var scrollTop = this.scrollTop;
	this.scrollTop = (scrollTop + ((event.deltaY * event.deltaFactor) * -1));
	});
});
function test_out(){
	document.getElementsByClassName("test").item(0).innerHTML = testVar;
}


Вопрос: прокрутка сделана и работает только если перетягивать ползунок , хотелось бы сделать так что бы была возможность прокрутки при наведении мыши на блок с помощью активации колесика мыши, ну как в обычных страницах, крутишь колесико двигается страница. (Пытался пошаманить с событием block.onscroll но как то не особо получилось), был бы вам очень благодарен за помощь в этом деле.

Да и примечание, решить задачу нужно только при помощи JS без jQuery.

(Если надо напишите в комментариях могу выложить весь код вместе с HTML и CSS рабочей страницы)

Ну вот пожалуй и все
Ответить с цитированием
  #2 (permalink)  
Старый 06.02.2015, 14:50
Интересующийся
Отправить личное сообщение для arcmag Посмотреть профиль Найти все сообщения от arcmag
 
Регистрация: 06.02.2015
Сообщений: 29

Все гоcпода, все таки смог разобраться
Просто не знал про событие onmousewheel
var wrapper, block, point2 = false;
window.onload = function(){
	wrapper = document.getElementsByClassName("wrapper").item(0);
	block = document.getElementsByClassName("block").item(0);
	wrapper.onmouseover = function(){point2=true;test_out();}
	wrapper.onmouseout = function(){point2=false;test_out();}
	wrapper.onmousewheel = mouseScrollBlock;
}
function mouseScrollBlock(e){
	if(point2){
		scrollTop+=-e.deltaY;
		if(scrollTop>0) scrollTop = 0;
		if(scrollTop<-(block.offsetHeight-wrapper.offsetHeight))
		scrollTop = -(block.offsetHeight-wrapper.offsetHeight);
		block.style.marginTop = scrollTop+"px";
		test_out();
	}
}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание сценария для веб-страницы Елена1991 Общие вопросы Javascript 2 17.05.2011 18:43
Новая система управления сайтом Scripto CMS deepslam Ваши сайты и скрипты 38 31.01.2011 14:55
Создание файла sitemap для индексации vabelousov Оффтопик 4 21.01.2011 18:57
Userscript для скрытия блока MustDie Firefox/Mozilla 12 02.08.2010 14:54
Создание скрипта! Создание диктанта для учеников! Елизавета Работа 10 30.06.2010 21:00