Monday, May 13, 2024
 Popular · Latest · Hot · Upcoming
160
rated 0 times [  161] [ 1]  / answers: 1 / hits: 77905  / 12 Years ago, wed, september 26, 2012, 12:00:00

Some of us might not want to use ready plugins because of their high sizes and possibilty of creating conflicts with current javascript.



I was using light slider plugins before but when customer gives modular revise, it became really hard to manipulate. Then I aim to build mine for customising it easily. I believe sliders shouldn't be that complex to build from beginning.



What is a simple and clean way to build jQuery image slider?


More From » jquery

 Answers
16

Before inspecting examples, you should know two jQuery functions which i used most.



index() returns value is an integer indicating the position of the first element within the jQuery object relative to its sibling elements.



eq() selects of an element based on its position (index value).



Basicly i take selected trigger element's index value and match this value on images with eq method.



- FadeIn / FadeOut effect.



- Sliding effect.



- alternate Mousewheel response.






html sample:



<ul class=images>
<li>
<img src=images/1.jpg alt=1 />
</li>
<li>
<img src=images/2.jpg alt=2 />
</li>
...
</ul>

<ul class=triggers>
<li>1</li>
<li>2</li>
...
</ul>
<span class=control prev>Prev</span>
<span class=control next>Next</span>





OPACITY EFFECT: jsFiddle.



css trick: overlapping images with position:absolute



ul.images { position:relative; }
ul.images li { position:absolute; }


jQuery:



var target;
var triggers = $('ul.triggers li');
var images = $('ul.images li');
var lastElem = triggers.length-1;

triggers.first().addClass('active');
images.hide().first().show();

function sliderResponse(target) {
images.fadeOut(300).eq(target).fadeIn(300);
triggers.removeClass('active').eq(target).addClass('active');
}





SLIDING EFFECT: jsFiddle.



css trick: with double wrapper and use child as mask



.mask { float:left; margin:40px; width:270px; height:266px; overflow:hidden;  }
ul.images { position:relative; top:0px;left:0px; }
/* this width must be total of the images, it comes from jquery */
ul.images li { float:left; }


jQuery:



var target;
var triggers = $('ul.triggers li');
var images = $('ul.images li');
var lastElem = triggers.length-1;
var mask = $('.mask ul.images');
var imgWidth = images.width();

triggers.first().addClass('active');
mask.css('width', imgWidth*(lastElem+1) +'px');

function sliderResponse(target) {
mask.stop(true,false).animate({'left':'-'+ imgWidth*target +'px'},300);
triggers.removeClass('active').eq(target).addClass('active');
}





Common jQuery response for both slider:



( triggers + next/prev click and timing )



triggers.click(function() {
if ( !$(this).hasClass('active') ) {
target = $(this).index();
sliderResponse(target);
resetTiming();
}
});

$('.next').click(function() {
target = $('ul.triggers li.active').index();
target === lastElem ? target = 0 : target = target+1;
sliderResponse(target);
resetTiming();
});
$('.prev').click(function() {
target = $('ul.triggers li.active').index();
lastElem = triggers.length-1;
target === 0 ? target = lastElem : target = target-1;
sliderResponse(target);
resetTiming();
});

function sliderTiming() {
target = $('ul.triggers li.active').index();
target === lastElem ? target = 0 : target = target+1;
sliderResponse(target);
}

var timingRun = setInterval(function() { sliderTiming(); },5000);
function resetTiming() {
clearInterval(timingRun);
timingRun = setInterval(function() { sliderTiming(); },5000);
}




[#82897] Monday, September 24, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
trinity

Total Points: 591
Total Questions: 102
Total Answers: 106

Location: Singapore
Member since Sun, Jul 25, 2021
3 Years ago
;