javascript - Creating a sliding image gallery that does not glitch on image change -
i have created sliding image gallery , when button pushed slides picture across , updates image attribute relevant sections. works 50% of time. other times there second glitch , images go in place expected. have attached javascript methods animate method , array change method. have looked elsewhere , cannot see else similar issue or going wrong, when doesn't happen often.
imagegallery.leftselect.onclick = function () { window.settimeout(imagegallery.rightclick, 250); imagegallery.animateimages('.image1', '.imageright'); imagegallery.animateimages('.imageright', '.imagenoneright'); imagegallery.animateimages('.imageleft', '.image1'); imagegallery.animateimages('.imagenoneleft', '.imageleft'); };
animateimages: function (classfrom, classto) { var classmoving = $(classfrom); var classgoingto = $(classto); classmoving.animate({ top: classgoingto.css('top'), left: classgoingto.css('left'), width: classgoingto.css('width'), opacity: classgoingto.css('opacity'), }, 258, function () { console.log('animated'); classmoving.css({"width":'', "opacity":'', "top":'', "left":'', }); }); }, rightclick: function () { imagegallery.imagesdisplay.push(imagegallery.imagesdisplay.shift()); imagegallery.imagenoneleft.setattribute('src', imagegallery.imagesdisplay[2]); imagegallery.imageleft.setattribute('src', imagegallery.imagesdisplay[1]); imagegallery.imagemain.setattribute('src', imagegallery.imagesdisplay[0]); imagegallery.imageright.setattribute('src', imagegallery.imagesdisplay[10]); imagegallery.imagenoneright.setattribute('src', imagegallery.imagesdisplay[9]); },
can assist, need work?
if there not clear or need more code let me know.
thanks,
first things first, culprit setattribute
of images i.e. whatever doing inside rightclick
, leftclick
functions reasons why seeing glitch. changing src
of img
tag produces glitch.
but cannot remove because approach relies heavily on swapping of images.
i had breakdown , understand approach first. way worked animate, example, image1
(the centered one) move position of imageleft
upon click on rightcarousel
button. on same click, had settimeout
of duration of animation call rightclick
function. rightclick
function swaps images image1
can remain @ center , images can come , go after animation. problem.
what had change image tags i.e. imagenoneleft
, imageleft
, image1
, imageright
& imagenoneright
change each others classes such position remains changed after animations.
also, had add animateimages
line inside leftselect
, rightselect
callbacks animate furthest images i.e. imagenoneleft
& imagenoneright
animate each other's positions respect click of buttons.
take @ this jsfiddle. understand lot better. , let me know if have questions.
javascript:
var imagegallery={ prefix:'https://dl.dropboxusercontent.com/u/45891870/experiments/stackoverflow/1.5/', imagesdisplay:['js.jpg','pixi.jpg','gsap.jpg','js.jpg','pixi.jpg','gsap.jpg','js.jpg','pixi.jpg','gsap.jpg','js.jpg','pixi.jpg'], rightselect:document.queryselector('.rightcarousel'), leftselect:document.queryselector('.leftcarousel'), imagemain:document.queryselector('.image1'), imageleft:document.queryselector('.imageleft'), imageright:document.queryselector('.imageright'), imagenoneleft:document.queryselector('.imagenoneleft'), imagenoneright:document.queryselector('.imagenoneright'), init:function(){ imagegallery.imagesdisplay.push(imagegallery.imagesdisplay.shift()); imagegallery.imagenoneleft.setattribute('src',imagegallery.prefix+imagegallery.imagesdisplay[2]); imagegallery.imageleft.setattribute('src',imagegallery.prefix+imagegallery.imagesdisplay[1]); imagegallery.imagemain.setattribute('src',imagegallery.prefix+imagegallery.imagesdisplay[0]); imagegallery.imageright.setattribute('src',imagegallery.prefix+imagegallery.imagesdisplay[10]); imagegallery.imagenoneright.setattribute('src',imagegallery.prefix+imagegallery.imagesdisplay[9]); }, animateimages:function(classfrom,classto){ var classmoving=$(classfrom); var classgoingto=$(classto); classmoving.animate({ top:classgoingto.css('top'), left:classgoingto.css('left'), width:classgoingto.css('width'), opacity:classgoingto.css('opacity') },258,function(){ $(this).removeclass(classfrom.substr(1)); $(this).addclass(classto.substr(1)); $(this).removeattr('style'); }); } }; imagegallery.init(); imagegallery.leftselect.onclick=function(){ imagegallery.animateimages('.imagenoneright','.imagenoneleft'); imagegallery.animateimages('.imageright','.imagenoneright'); imagegallery.animateimages('.image1','.imageright'); imagegallery.animateimages('.imageleft','.image1'); imagegallery.animateimages('.imagenoneleft','.imageleft'); }; imagegallery.rightselect.onclick=function(){ imagegallery.animateimages('.imagenoneleft','.imagenoneright'); imagegallery.animateimages('.imageleft','.imagenoneleft'); imagegallery.animateimages('.image1','.imageleft'); imagegallery.animateimages('.imageright','.image1'); imagegallery.animateimages('.imagenoneright','.imageright'); };
Comments
Post a Comment