login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Slider effect op eerste plaatje werkt niet (Opgelost)

Offline GroundZero - 04/01/2016 10:06 (laatste wijziging 04/01/2016 10:09)
Avatar van GroundZeroLid Hi,

ben momenteel bezig met het leren van jQuery en wou een eigen slider maker. Nu werk de slider prima so far, en de effecten ook, alleen het eerste plaatje heeft geen effect.

Iemand die mij kan vertellen hoe ik dit kan realiseren? van alles geprobeerd maar niks werkt.

Onderaan zie je dat ik op het eerste plaatje een class "transition" toeken, dit werkt prima maar toch is het plaatje niet geanimeerd.

Hij heeft dus direct het eindresultaat en slaat de overgang van de animatie over.

Mijn code hier:

  1. <!doctype html>
  2. <html lang="nl">
  3.  
  4. <meta charset="utf-8">
  5.  
  6. <title>Beta Slider</title>
  7.  
  8. <style type="text/css">
  9. body {
  10. background:#dedede;
  11. }
  12.  
  13. .description {
  14. width:611px;
  15. position:absolute;
  16. top:50%;
  17. left:50%;
  18. margin-top:-220px;
  19. margin-left:-330px;
  20. padding:12px;
  21. border:12px solid #fff;
  22. background:#D5D5D5;
  23. font-family:Verdana;
  24. font-size:12px;
  25. }
  26.  
  27. .container {
  28. width:660px;
  29. position:absolute;
  30. top:50%;
  31. left:50%;
  32. margin-left:-330px;
  33. margin-top:-116px;
  34. padding:12px;
  35. box-sizing:border-box;
  36. border:1px solid #dedede;
  37. background:#fff;
  38. }
  39.  
  40. .slide-viewer {
  41. position:relative;
  42. overflow:hidden;
  43. height:312px;
  44. }
  45.  
  46. .slide-viewer .slide-group {
  47. width:100%;
  48. height:100%;
  49. position:relative;
  50. }
  51.  
  52. .slide-viewer .slide-group .slide {
  53. width:100%;
  54. height:100%;
  55. position:absolute;
  56. display:none;
  57. }
  58.  
  59. .slide-viewer .slide-group .slide:first-child {
  60. display:block;
  61. }
  62.  
  63. .slide-buttons {
  64. position:absolute;
  65. width:100%;
  66. bottom:10px;
  67. text-align: center;
  68. }
  69.  
  70. .slide-btn {
  71. border: none;
  72. background: none;
  73. color: #fff;
  74. font-size: 200%;
  75. line-height: 0.5em;
  76. }
  77.  
  78. .slide-btn.active, .slide-btn:hover {
  79. color: #F86C24;
  80. cursor: pointer;
  81. }
  82.  
  83. .slide-viewer .slide-group .slide .textarea {
  84. position:absolute;
  85. top:30px;
  86. left:30px;
  87. width:100%;
  88. }
  89.  
  90. .slide-viewer .slide-group .slide .textarea p {
  91. font-size:24px;
  92. color:#FFFFFF;
  93. margin:11px 0px 11px 0px;
  94. }
  95.  
  96. .slide-viewer .slide-group .slide .textarea p .black {
  97. background-image:url('bg.png');
  98. background-repeat:repeat;
  99. padding:5px;
  100. }
  101.  
  102. .slide-viewer .slide-group .slide img {
  103. -webkit-transition:8s all ease-in-out;
  104. -moz-transition:8s all ease-in-out;
  105. transition:8s all ease-in-out;
  106. }
  107.  
  108. .transition {
  109. -webkit-transform: scale(1.1) rotate(2deg);
  110. -moz-transform: scale(1.1) rotate(2deg);
  111. -o-transform: scale(1.1) rotate(2deg);
  112. transform: scale(1.1) rotate(2deg);
  113. }
  114.  
  115. .black a:link, .black a:visited {
  116. color:#72C02C;
  117. text-decoration:none;
  118. border-bottom:1px solid #72C02C;
  119. }
  120.  
  121. .green {
  122. color:#72C02C;
  123. font-weight:normal;
  124. }
  125.  
  126. <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
  127.  
  128. </head>
  129.  
  130.  
  131.  
  132. <div class="container slider">
  133. <div class="slide-viewer">
  134. <div class="slide-group">
  135. <div class="slide slide-1">
  136. <img src="slider1.jpg" alt="" />
  137. <div class="textarea">
  138. <p>
  139. <span class="black">
  140. <span class="normal"><a href="#" title="">Lorem ipsum</a> dolor sit amet</span>
  141. </span>
  142. </p>
  143.  
  144. <p>
  145. <span class="black">
  146. <span class="normal"><strong class="green">consectetuer</strong> adipiscing elit</span>
  147. </span>
  148. </p>
  149.  
  150. <p>
  151. <span class="black">
  152. <span class="normal">Typi non habent <strong class="green">claritatem</strong> insitam</span>
  153. </span>
  154. </p>
  155. </div>
  156. </div>
  157. <div class="slide slide-2">
  158. <img src="slider2.jpg" alt="" />
  159. <div class="textarea">
  160. <p>
  161. <span class="black">
  162. <span class="normal"><a href="#" title="">Lorem ipsum</a> dolor sit amet</span>
  163. </span>
  164. </p>
  165.  
  166. <p>
  167. <span class="black">
  168. <span class="normal"><strong class="green">consectetuer</strong> adipiscing elit</span>
  169. </span>
  170. </p>
  171.  
  172. <p>
  173. <span class="black">
  174. <span class="normal">Typi non habent <strong class="green">claritatem</strong> insitam</span>
  175. </span>
  176. </p>
  177. </div>
  178. </div>
  179. <div class="slide slide-3">
  180. <img src="slider3.jpg" alt="" />
  181. <div class="textarea">
  182. <p>
  183. <span class="black">
  184. <span class="normal"><a href="#" title="">Lorem ipsum</a> dolor sit amet</span>
  185. </span>
  186. </p>
  187.  
  188. <p>
  189. <span class="black">
  190. <span class="normal"><strong class="green">consectetuer</strong> adipiscing elit</span>
  191. </span>
  192. </p>
  193.  
  194. <p>
  195. <span class="black">
  196. <span class="normal">Typi non habent <strong class="green">claritatem</strong> insitam</span>
  197. </span>
  198. </p>
  199. </div>
  200. </div>
  201. <div class="slide slide-4">
  202. <img src="slider4.jpg" alt="" />
  203. <div class="textarea">
  204. <p>
  205. <span class="black">
  206. <span class="normal"><a href="#" title="">Lorem ipsum</a> dolor sit amet</span>
  207. </span>
  208. </p>
  209.  
  210. <p>
  211. <span class="black">
  212. <span class="normal"><strong class="green">consectetuer</strong> adipiscing elit</span>
  213. </span>
  214. </p>
  215.  
  216. <p>
  217. <span class="black">
  218. <span class="normal">Typi non habent <strong class="green">claritatem</strong> insitam</span>
  219. </span>
  220. </p>
  221. </div>
  222. </div>
  223. </div>
  224. </div>
  225. <div class="slide-buttons">
  226.  
  227. </div>
  228. </div>
  229.  
  230. <script language="javascript">
  231. $('.slider').each(function() {
  232. var $this = $(this);
  233. var $group = $(this).find('.slide-group');
  234. var $slides = $(this).find('.slide');
  235. var buttonArray = [];
  236. var currentIndex = 0;
  237. var timeout;
  238.  
  239. function move(newIndex) {
  240. var animateLeft;
  241. var animateRight;
  242.  
  243. advance();
  244.  
  245. if($group.is(':animated') || currentIndex === newIndex) {
  246. return;
  247. }
  248.  
  249. buttonArray[currentIndex].removeClass('active');
  250. buttonArray[newIndex].addClass('active');
  251.  
  252. if(newIndex > currentIndex) {
  253. slideLeft = '100%';
  254. animateLeft = '-100%';
  255. } else {
  256. slideLeft = '-100%';
  257. animateLeft = '100%';
  258. }
  259.  
  260. $slides.eq(newIndex).css({
  261. left: slideLeft,
  262. display: 'block',
  263. });
  264.  
  265. $group.animate({
  266. left: animateLeft
  267. }, function(){
  268. $slides.eq(newIndex).find('img').removeClass('transition');
  269. $slides.eq(currentIndex).find('img').removeClass('transition');
  270.  
  271. $slides.eq(currentIndex).css({ display: 'none' });
  272. $slides.eq(newIndex).css({ left: 0 });
  273.  
  274. $slides.eq(newIndex).find('img').addClass('transition');
  275.  
  276. $group.css({ left: 0 });
  277. currentIndex = newIndex;
  278. });
  279. }
  280.  
  281. function advance() {
  282. clearTimeout(timeout);
  283.  
  284. timeout = setTimeout(function(){
  285. if(currentIndex < ($slides.length - 1)) {
  286. move(currentIndex + 1);
  287. } else {
  288. move(0);
  289. }
  290. }, 8000);
  291. }
  292.  
  293. $.each($slides, function(index) {
  294. var $button = $('<button type="button" class="slide-btn">&bull;</button>');
  295.  
  296. if(index === currentIndex) {
  297. $button.addClass('active');
  298. }
  299.  
  300. $button.on('click', function(){
  301. move(index)
  302. }).appendTo('.slide-buttons');
  303.  
  304. buttonArray.push($button);
  305. });
  306.  
  307. advance();
  308.  
  309. $this.find('img:first').addClass('transition');
  310. });
  311.  
  312. </body>
  313. </html>

6 antwoorden

Gesponsorde links
Offline Jointjeff - 04/01/2016 11:52
Avatar van Jointjeff HTML interesse Als je dat zoom-effect bedoelt, in deze fiddle werkt het:
https://jsfiddle.net/r2auae8e/
Bedankt door: GroundZero
Offline GroundZero - 04/01/2016 13:12
Avatar van GroundZero Lid ja perfect dat is precies wat ik bedoelde, zal eens kijken wat je precies hebt gedaan, hartstikke bedankt!

En dat fiddle is wel super handig, moet ik voortaan ook maar is gaan gebruiken in plaats van de code hier te copy pasten hahaha 

Nogmaals dank!
Offline Thomas - 04/01/2016 15:02
Avatar van Thomas Moderator Mja, maar wat is het verschil tussen de fiddle en bovenstaande code, met andere woorden, waarom werkt die wel?

Een ander nadeel van het extern plaatsen van oplossingen is dat deze op den duur mogelijk niet meer beschikbaar zijn.

Daarbij:
- $this wordt maar 1x gebruikt dus heeft nagenoeg geen meerwaarde
- moet het niet <script type="text/javascript"> (of zelfs simpelweg <script>) zijn in plaats van <script language="javascript">?
- waar is je $().ready(function() { ... }); block?
- je zoekt .slide-group en .slide door heel je document; de slider vormt een redelijk afgebakende eenheid met voorgeschreven gedrag, waarom voeg je geen id toe aan de container waar je aan refereert? op die manier zou je meerdere (verschillende) sliders op één pagina kunnen gebruiken (als je dat zou willen); daarbij zou je je slider code zo op kunnen zetten dat je deze kunt instantiëren als object

Met de fiddle is mogelijk je probleem opgelost maar het is dus volstrekt onduidelijk waarom deze dan wel werkt. Ook helpt dit anderen die naar een oplossing voor een soortgelijk probleem zoeken niet... Daarnaast is er nog wel het e.e.a. te verbeteren als ik bovenstaande / fiddle code bekijk.
Offline Jointjeff - 04/01/2016 15:23 (laatste wijziging 04/01/2016 15:25)
Avatar van Jointjeff HTML interesse @Thomas: goede punten, mee eens.

Ik heb enkel de code op jsfiddle gezet om 'snel' te debuggen, maar het probleem bleek aldaar niet aan de orde. Is voor de lange termijn (mocht jsfiddle ooit stoppen) inderdaad niet handig.

Ik heb verder niet de tijd genomen naar de kwaliteit van de code te kijken.

@GroundZero:
Het verschil met de fiddle is de plaats waar je jQuery oproept. Dit kun je beste doen net voor het sluiten van de body (</body>).
https://develop...#js_bottom
Offline Thomas - 04/01/2016 17:43
Avatar van Thomas Moderator
Citaat:
Het verschil met de fiddle is de plaats waar je jQuery oproept. Dit kun je beste doen net voor het sluiten van de body (</body>).

En daar is precies dat .ready() block voor. Dit zorgt ervoor dat de jQuery-JavaScript pas uitgevoerd wordt op het moment dat je hele document is geladen .

Daarbij is het nog steeds handig/netjes om inline JavaScript uit te voeren net voor je </body> tag, buiten enige andere tag.

Om deze JavaScript op de goede plek te krijgen zou je output buffering in PHP kunnen gebruiken. Je moet dan wel een middel hebben om deze snippets op te sparen in de code die je uitvoert, om deze daarna te voeren aan een routine in je "maintemplate functionaliteit" (bijvoorbeeld een methode die je footer uitprint).
Bedankt door: Jointjeff
Offline GroundZero - 05/01/2016 10:08 (laatste wijziging 05/01/2016 11:23)
Avatar van GroundZero Lid Haha, ik had de oplossing wel willen posten hoor alleen een beetje druk en dus traag 
Dus de oplossing was puur wanneer jQuery geladen werd.

Zoals ik al zij, ik ben het aan het leren. Had een boek gekocht, maar schijnbaar is de kwaliteit dus ook niet 100% haha want de code heb ik 1:1 overgeschreven uit het boek 

Wanneer ik de oplossing had, wilde ik het inderdaad wat verbeteren en enkele van je suggesties mee nemen ;)

Ook dat alles op één plek stond was gewoon puur omdat ik aan het leren ben haha, normaal gesproken is het ook net voor de sluitende body tag 

Dank voor jullie reacties!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.22s