WordPress : Comment faire fonctionner le curseur javascript !

Publié par Jean-Michel le

Je viens juste de commencer à développer mes propres thèmes et je suis bloqué en ajoutant du javascript à mon slider.

J’ai ajouté le curseur dans mon fichier index.php comme ci-dessous :

<div class="carousel">


    <div class="carousel__content">
        <div class="item">
    <p class="title">First</p>
    <img src="http://placehold.it/1800x850/70AD96/FFF&text=&nbsp;" alt="">
  </div>
        <div class="item">
    <p class="title">Second</p>
    <img src="http://placehold.it/1800x850/EA4E23/FFF&text=&nbsp;" alt="">
  </div>
        <div class="item">
    <p class="title">Third</p>
    <img src="http://placehold.it/1800x850/9BA452/FFF&text=&nbsp;" alt="">
  </div>
        <div class="item">
    <p class="title">Fourth</p>
    <img src="http://placehold.it/1800x850/472D38/FFF&text=&nbsp;" alt="">
  </div>
        <div class="item">
    <p class="title">Fifth</p>
    <img src="http://placehold.it/1800x850/F77C85/FFF&text=&nbsp;" alt="">
  </div>
        <div class="item">
    <p class="title">Sixth</p>
    <p class="title title--sub">Last Item</p>
    <img src="http://placehold.it/1800x850/00FFAE/FFF&text=&nbsp;" alt="">
  </div>
    </div>

<div class="carousel__nav">
  <a href="#" class="nav nav--left">Previous</a>
  <a href="#" class="nav nav--right">Next</a>
</div>

Et puis créé un fichier js/slider-js.js avec ce qui suit :

( function () {
var carouselContent, carouselIndex, carouselLength, firstClone, firstItem, isAnimating, itemWidth, lastClone, lastItem;
carouselContent = $('.carousel__content');
carouselIndex = 0;
carouselLength = carouselContent.children().length;
isAnimating = false;
itemWidth = 100 / carouselLength;
firstItem = $(carouselContent.children()[0]);
lastItem = $(carouselContent.children()[carouselLength - 1]);
firstClone = null;
lastClone = null;
carouselContent.css('width', carouselLength * 100 + '%');
carouselContent.transition({ x: carouselIndex * -itemWidth + '%' }, 0);
$.each(carouselContent.children(), function () {
    return $(this).css('width', itemWidth + '%');
});
$('.nav--left').on('click', function () {
    if (isAnimating) {
        return;
    }
    isAnimating = true;
    carouselIndex--;
    if (carouselIndex === -1) {
        lastItem.prependTo(carouselContent);
        carouselContent.transition({ x: (carouselIndex + 2) * -itemWidth + '%' }, 0);
        return carouselContent.transition({ x: (carouselIndex + 1) * -itemWidth + '%' }, 1000, 'easeInOutExpo', function () {
            carouselIndex = carouselLength - 1;
            lastItem.appendTo(carouselContent);
            carouselContent.transition({ x: carouselIndex * -itemWidth + '%' }, 0);
            return isAnimating = false;
        });
    } else {
        return carouselContent.transition({ x: carouselIndex * -itemWidth + '%' }, 1000, 'easeInOutExpo', function () {
            return isAnimating = false;
        });
    }
});
$('.nav--right').on('click', function () {
    if (isAnimating) {
        return;
    }
    isAnimating = true;
    carouselIndex++;
    return carouselContent.transition({ x: carouselIndex * -itemWidth + '%' }, 1000, 'easeInOutExpo', function () {
        isAnimating = false;
        if (firstClone) {
            carouselIndex = 0;
            carouselContent.transition({ x: carouselIndex * -itemWidth + '%' }, 0);
            firstClone.remove();
            firstClone = null;
            carouselLength = carouselContent.children().length;
            itemWidth = 100 / carouselLength;
            carouselContent.css('width', carouselLength * 100 + '%');
            $.each(carouselContent.children(), function () {
                return $(this).css('width', itemWidth + '%');
            });
            return;
        }
        if (carouselIndex === carouselLength - 1) {
            carouselLength++;
            itemWidth = 100 / carouselLength;
            firstClone = firstItem.clone();
            firstClone.addClass('clone');
            firstClone.appendTo(carouselContent);
            carouselContent.css('width', carouselLength * 100 + '%');
            $.each(carouselContent.children(), function () {
                return $(this).css('width', itemWidth + '%');
            });
            return carouselContent.transition({ x: carouselIndex * -itemWidth + '%' }, 0);
        }
    });
});

}.call(ceci));

puis lié à mon functions.php avec ce qui suit :

function skinsave_2016_slider() {
wp_enqueue_script('skinsave_2016-slider-js', content_url('/js/slider-js.js'), array(), null, true);
}
add_action('wp_head', 'skinsave_2016_slider');

J’ai également ajouté ce qui suit entre les balises de mon fichier header.php :

<script type="text/javascript" src="<?php bloginfo('skinsave_2016'); ?>/js/slider-js.js"></script>

Et le CSS :

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

body, html {
  font-family: "europa-1","europa-2", sans-serif;
  overflow: scroll;
}

.wrapper {
  max-width: 940px;
  width: 100%;
  position: relative;
  overflow: scroll;
  margin: 0 auto;
}

/**
 * Use this wrapper only for demo purposes
 * So you can show the items outside the wrapper
 */
}
.wrapper--demo:before {
  left: -800px;
}

.carousel {
  width: 100%;
  position: relative;
}
.carousel .carousel__content {
  width: auto;
  position: relative;
  overflow: scroll;
  -webkit-backface-visibility: hidden;
  -webkit-transition: translate3d(0, 0, 0);
}
.carousel .carousel__content .item {
  display: block;
  float: left;
  width: 100%;
  position: relative;
}
.carousel .carousel__content .item .title {
  position: absolute;
  top: 50%;
  left: 0;
  margin: -33px 0 0 0;
  padding: 0;
  font-size: 3rem;
  width: 100%;
  text-align: center;
  letter-spacing: .3rem;
  color: #FFF;
}
.carousel .carousel__content .item .title--sub {
  margin-top: 20px;
  font-size: 1.2em;
  opacity: .5;
}
.carousel .carousel__content .item img {
  width: 100%;
  max-width: 100%;
  display: block;
}
.carousel .carousel__nav {
  position: absolute;
  width: 100%;
  top: 50%;
  margin-top: -17px;
  left: 0;
  z-index: 1;
}
.carousel .carousel__nav .nav {
  position: absolute;
  top: 0;
  color: #000;
  background: #FFF;
  padding: 8px 12px;
  font-weight: bold;
  text-decoration: none;
  font-size: .8rem;
  transition: padding .25s ease;
}
.carousel .carousel__nav .nav:hover {
  padding: 8px 20px;
}
.carousel .carousel__nav .nav--left {
  border-radius: 0px 3px 3px 0px;
}
.carousel .carousel__nav .nav--right {
  right: 0;
  border-radius: 3px 0px 0px 3px;
}

Le curseur se charge correctement mais ne s’affiche pas comme un curseur, mais plutôt comme une liste de blocs. J’ai l’impression que c’est l’implémentation du javascript qui pose problème. Quelqu’un peut-il aider?

Solution n°1 trouvée

Vous devez changer la partie mise en file d’attente en ceci :

function skinsave_2016_slider() {
    wp_enqueue_script( 'skinsave_2016-slider-js', get_bloginfo( 'template_url' ) . '/js/slider-js.js', array(), null, true);
}
add_action('wp_enqueue_scripts', 'skinsave_2016_slider');

Le problème était que votre fonction content_url()renvoie http://yourdomain.com/wp-content, et non l’URL du modèle. get_bloginfo( 'template_url' )revient http://yourdomain.com/wp-content/themes/yourthemeslug.

La deuxième version que vous avez essayée vous a écrit bloginfo('skinsave_2016');, où ‘skinsave_2016’ n’est pas un argument valide.

Restez avec la première version cependant, car c’est la bonne façon.

Assurez-vous également que votre thème appelle wp_head()et wp_footer()!

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *