Ich hab auf einer Seite mehrere Boxen, in die aus der DB Bilder geladen werden, und die als default auf display:none; gesetzt sind.
Und ich zeig dann mit dieser Funktion ramdom die Bilder an. Das sieht im Endeffekt so aus, nicht schön, aber es funktioniert...
HTML-Teil
HTML-Code:
<div rel="1" class="ps-slider-box">
<div style="display: none;" id="image-1-1" class="ps-slider-images">
<img style="max-width: 200px; border: 0pt none;" src="/public/images/living/4.jpg">
</div>
<div style="display: block;" id="image-1-2" class="ps-slider-images">
<img style="max-width: 200px; border: 0pt none;" src="/public/images/living/5.jpg">
</div>
</div>
<div rel="2" class="ps-slider-box">
<div style="display: none;" id="image-2-1" class="ps-slider-images">
<img style="max-width: 200px; border: 0pt none;" src="/public/images/living/1.jpg">
</div>
<div style="display: none;" id="image-2-2" class="ps-slider-images">
<img style="max-width: 200px; border: 0pt none;" src="/public/images/living/2.jpg">
</div>
<div style="display: block;" id="image-2-3" class="ps-slider-images">
<img style="max-width: 200px; border: 0pt none;" src="/public/images/living/3.jpg">
</div>
</div> jQuery-Funktion
Code:
;(function($){
$.fn.imageChanger = function(className){
var newId, actId, actualLink, newLink, itemName;
var imageCount, livingId;
function initSlider() {
itemName = className;
$(itemName).each(function(){
$(this).children().eq(0).fadeIn('slow', function(){});
});
}
function changeImage() {
$(itemName).each(function(){
imageCount = parseInt($(this).children().length);
livingId = parseInt($(this).attr('rel'));
$(this).children().each(function(i){
if ($(this).is(':visible')) {
actId = parseInt(i)+1;
if (actId == imageCount) {
newId = 1;
} else {
newId = actId + 1;
}
actualLink = '#image-' + livingId + '-' + actId;
newLink = '#image-' + livingId + '-' + newId;
}
});
$(actualLink).fadeOut(0, function(){});
$(newLink).fadeIn('slow', function(){});
});
if (typeof Function.prototype.bind !== 'function') {
Function.prototype.bind = function (context) {
var args = Array.prototype.slice.call(arguments, 1),
f = this;
return function () {
args.push.apply(args, arguments);
return f.apply(context, args);
};
};
}
setTimeout(changeImage.bind(this), 7000);
}
/* Here we go */
initSlider(className);
changeImage();
}
})(jQuery);
Aufruf:
Code:
$(document).ready(function(){
$.fn.imageChanger('.ps-slider-box');
});
Wenn du verbesserungsvorschläge hast nur her damit.
Noch eine Frage am Rande, wie mach ich Rückgabe eines Objekts, mit dem ich weiter arbeiten kann. Sowas in der Art meine ich.
Code:
;(function($){
$.fn.myFunct = function(){
function doSomething() {
alert('called->doSomething()');
}
function test() {
alert('test');
}
doSomething();
/* was muss ich hier zurückliefern? this?*/
return this;
}
})(jQuery);
$(document).ready(function(){
var myFunc = $.fn.myFunc();
$('#clickMe').click(function(){
myFunc.test();
});
});