Javascript.RU

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

Постепенная подгрузка изображений
Всем привет!
Нужна помощь. я новичок в javascript и jquery

Есть скрипт PHP, который берет из базы информацию и URL до изображений, а также слайдер на CSS + javascript(jquery)
меня все устраивает, единственное хотелось бы сделать так, чтобы при прокрутке (нажатии на картинку-курсор) изображения подгружались постепенно, а не все сразу... хочется сократить трафик
как это можно реализовать?

CSS:
Код:
<style>
#wrapper-sl {
    width: 100%;
}

#slider {
   	position: relative;
	border: 1px solid #ccc;
	width: 100%;

}

.scroll {
	overflow: hidden;
	width: 100%;
    position: relative;
	height:230px;
*	height:210px;
	height:210px\9;
}

.scrollContainer {
	position: relative;
}

.scrollContainer div.panel {
    width: 195px;
}
 
.inside {
	display: none;
	background: #fff;
	font: 11px/1.5 tahoma, serif;
	color: #036;
	padding: 20px;
*	padding: 0 0 20px 0;
	padding: 0 0 20px 0\9;
	height: 190px;
	border: 1px solid #E0DED6;
}

.inside img {
	display: block;
	/* width: 150px; */
}

.inside img:hover {
filter:alpha(opacity=50);
-moz-opacity: 0.5; 
opacity: 0.5;
-khtml-opacity: 0.5;
}

.inside h2 {
	font-weight: normal;
	color: #111;
	font-size: 12px;
	
}

.inside p {
	font-size: 11px;
	color: #ccc;
}

.inside a {
	color: #000;
	text-decoration: none;
	border-bottom: 0px dotted #ccc;
}

.scrollButtons {
    position: absolute;
    top: 100px;
    cursor: pointer;
}

.scrollButtons.left {
    left: -12px;
}

.scrollButtons.right {
    right: -12px;
}

.hide {
    display: none;
}
/*Hintbox block*/
.jslideblock.hover div[class="jslidebox"] {display: block;}
.jslideblock a {color: #999999; border-bottom:1px dotted #CCCCCC; text-decoration:none; font-size: 11px;}
.jslideblock b a {color: #131313; font-size: 13px; font-family:Arial,Helvetica,Geneva,sans-serif;}
.jslidebox {
	display: none;
	position: absolute;
	z-index: 3;
	right: 0px;
	top: 0px;
	padding:10px;
	border: 1px solid #ccc;
	background: #fff;
	font-size: 12px;
}
.jslidebox p {color: #131313; background: #F5F5F5; margin: -9px -9px 10px -9px; padding: 5px 9px; font-size: 12px; font-family:Arial,Helvetica,Geneva,sans-serif;}
.jslidebox p:first-child { margin-bottom: 0;}

  </style>
HTML:

Код:
  <div id="wrapper-sl">

            <div id="slider">    

            <img class="scrollButtons left" src="{THEME}/images/leftarrow.png" />

			<div style="overflow: hidden;" class="scroll">
	
				<div class="scrollContainer">
			
					{posts}
			
                </div>
				
            </div>

			<img class="scrollButtons right" src="{THEME}/images/rightarrow.png" />

        </div>
        
    </div>

posts это тоже HTML, но генериться в PHP

posts:
Код:
<div class="panel" id="panel_{rank}">
<div class="inside"><a href="{href}">
<img src="{image}" alt="" title="{title}" /></a>
<a href="{href}">{title}</a>
</div>
</div>
JS скрипт

$(function() {
	
	var totalPanels			= $(".scrollContainer").children().size();
	var movingStep			= 1;
	var movingDistance	    = movingStep * 195;

	var $panels				= $('#slider .scrollContainer > div');
	var $container			= $('#slider .scrollContainer');

	$panels.css({'float' : 'left','position' : 'relative'});
    
	$("#slider").data("currentlyMoving", false);

	$container
		.css('width', ($panels[0].offsetWidth * $panels.length) + 100 )
		.css('left', "0px");

	var scroll = $('#slider .scroll').css('overflow', 'hidden');

	//direction true = right, false = left
	function change(direction) {
	   
	    //if not at the first or last panel
		if((direction && !(curPanel < totalPanels - 3)) || (!direction && (curPanel <= 1))) { return false; }	
        
        //if not currently moving
        if (($("#slider").data("currentlyMoving") == false)) {
            
			$("#slider").data("currentlyMoving", true);
			
			var next         = direction ? curPanel + 1 : curPanel - 1;
			var leftValue    = $(".scrollContainer").css("left");
		//	alert (leftValue);
		
			var movement	 = direction ? parseFloat(leftValue, 10) - movingDistance : parseFloat(leftValue, 10) + movingDistance;
		
			$(".scrollContainer")
				.stop()
				.animate({
					"left": movement
				}, function() {
					$("#slider").data("currentlyMoving", false);
				});
	
			curPanel = next;
			
			//remove all previous bound functions
			$("#panel_"+(curPanel+1)).unbind();	
			
			//go forward
			$("#panel_"+(curPanel+1)).click(function(){ change(true); });
			
            //remove all previous bound functions															
			$("#panel_"+(curPanel-1)).unbind();
			
			//go back
			$("#panel_"+(curPanel-1)).click(function(){ change(false); }); 
			
			//remove all previous bound functions
			$("#panel_"+curPanel).unbind();
		}
	}
	
	// Set up "Current" panel and next and prev

	var curPanel = 1;
	//$("#panel_"+(curPanel+1)).click(function(){ change(true); });
	//$("#panel_"+(curPanel-1)).click(function(){ change(false); });
	
	//when the left/right arrows are clicked
	$(".right").click(function(){ change(true); });	
	$(".left").click(function(){ 

	change(false); 
	});
	
	//autoscroll
	//setInterval("$('.right').click()", 2000);
	
	
});
Ответить с цитированием
  #2 (permalink)  
Старый 14.10.2011, 16:30
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Приблизительно так

Нужно дописать метод change

1) в переменной next как я понимаю будет панель которую мы сейчас покажем. Соответственно весь код пишем после того как переменная определена.

2) Нужно выяснить есть ли в $("#panel_"+next).html() содержимое
3) если содержимое отсутствует
то создать содержимое. $("#panel_"+next).html("<img src='"+$("#panel_"+next).attr("src") +"'>");
или загрузить откудонибудь $("#panel_"+next).load($("#panel_"+next).attr("src "));

ссылка на содержимое как понимаешь будет хранится в атрибуте src у #panel

что касается php
В php коде как понимаешь все создаваемые #panel должны быть пустыми, кроме первого. Незабудь атрибут srс передать только.
Впринципе может быть пустой и первая, но тогда при инициализации скрипта заполни содержимое 1й панели сам через метод load или череp html, как в твоём случае лучше я незнаю.

очень советую вышеописанное реализовать самостоятельно.

Level2 (не очень надо)
Для экономии ресурсов, вмеcто проверки html(), круто завести и проверять тригер в data. Но чуть сложнее. Ведь его надо не только проверять но и устанавливать.

Level 3. (вообще ненадо)
Слайдер будет гибче а php проще, если вместо обращения по #panel_"+curPanel, обращаться по $("#panel")[curPanel].
то есть сложный id вида panel_1/panel_2 - нам будет уже не нужен.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 14.10.2011 в 17:05.
Ответить с цитированием
  #3 (permalink)  
Старый 16.10.2011, 14:57
Интересующийся
Отправить личное сообщение для malkoff Посмотреть профиль Найти все сообщения от malkoff
 
Регистрация: 14.10.2011
Сообщений: 18

Мегареспект тебе
Спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повременная смена изображений jozev Элементы интерфейса 2 01.08.2011 18:43
Прокрутка изображений gen552 Элементы интерфейса 6 01.04.2011 13:11
Скролл мини изображений I-Trap Элементы интерфейса 1 25.11.2009 22:03
Подгрузка изображений по клику CompModdd Общие вопросы Javascript 17 30.04.2009 02:39
проблема со сменой изображений при наведение Jack Элементы интерфейса 0 19.03.2009 22:13