Rotació de Imatges 360º on hover - (Informàtica, jQuery, Wordpress)

Partint de la galeria de productes del woocommerce per agafar les imatges per a la rotació.

Nota: Exemple implementat en WooCommerce

$(document).ready(function () {
    var en_moviment = false;
    var el_moviment = setTimeout(function() { return false}, 500);
    $(".nota-moviment .imagesequence").mouseenter(function () {
        var data = [];
        data.prod_id = $(this).attr("data-id");
        data.total_img = ($(this).attr('data-total') - 1);
        openMovmentImage($(this), data);
    }).mouseleave(function () {
        closeMovmentImage(el_moviment);
    });

    function closeMovmentImage(el_moviment) {
        $("img.in_movment_rotate").removeClass("active");
        $("img.in_movment_rotate[data-gal=0]").addClass("active");
        clearTimeout(el_moviment);
        en_moviment = false;
        return false;
    }

    function openMovmentImage(element, data) {
        $(element).find('img.in_movment_rotate').each(function (index) {
            (function (that, i) {
                if (!en_moviment) {
                    el_moviment = setTimeout(function () {
                        en_moviment = true;
                        if (en_moviment) {
                            $("img.in_movment[data-prod=" + data.prod_id + "]").removeClass("active");
                            $("img.in_movment_rotate[data-prod=" + data.prod_id + "][data-gal=" + i + "]").addClass("active");
                        } else {
                            closeMovmentImage(el_moviment);
                            clearTimeout(el_moviment);
                        }

                        if (i == data.total_img) {
                            $("img.in_movment[data-prod=" + data.prod_id + "]").removeClass("active");
                            $("img.in_movment_rotate[data-prod=" + data.prod_id + "][data-gal=0]").addClass("active");
                        }
                    }, 500 * i);
                } else {
                    $("img.in_movment[data-prod=" + data.prod_id + "]").removeClass("active");
                    $("img.in_movment_rotate[data-prod=" + data.prod_id + "][data-gal=0]").addClass("active");
                }
            })($(this), index);
        });
        $("img.in_movment_rotate").removeClass("active");
        $("img.in_movment_rotate[data-prod=" + data.prod_id + "][data-gal=0]").addClass("active");
        $("img.in_movment_rotate[data-gal=0]").addClass("active");
    }
});
<div class="contenidor-list">
                    <ul>
                        <?php foreach ($productes as $keyP => $producte) :
                            $thumbnail = wp_get_attachment_image_url(get_post_thumbnail_id($producte->ID), 'full');
                            $url = get_permalink($producte->ID);
                            $wp_prod = new WC_product($producte->ID);
                            $galeria = $wp_prod->get_gallery_image_ids();
                        ?>
                            <li>
                                <div class="contenidor-img">
                                    <div class="nota-moviment">
                                        <div class="spacer s<?php echo $keyP; ?>" id="trigger"></div>
                                        <a href="<?php echo_empty($url); ?>">
                                            <div id="imagesequence_<?php echo $keyP; ?>" class="imagesequence imagesequence_<?php echo $keyP; ?>" data-id="<?php echo $producte->ID; ?>" data-total="<?php echo count($galeria); ?>">
                                                <?php if (!empty($galeria) || count($galeria) > 1) : ?>
                                                    <?php foreach ($galeria as $kgal => $gal) : ?>
                                                        <img class="in_movment in_movment_rotate <?php echo ($kgal == 0) ? 'active' : ''; ?> <?php echo ($producte->imatge_petita) ? "resizeimg" : ""; ?>" data-id="<?php echo $keyP; ?>" data-gal="<?php echo $kgal; ?>" data-total="<?php echo count($galeria); ?>" data-prod="<?php echo $producte->ID; ?>" src="<?php echo_empty(wp_get_attachment_url($gal)); ?>">
                                                    <?php endforeach; ?>
                                                <?php
                                                else : ?>
                                                    <img class="in_movment <?php echo ($producte->imatge_petita) ? "resizeimg" : ""; ?>" id="myimg_<?php echo $keyP; ?>" src="<?php echo_empty($thumbnail); ?>">
                                                <?php endif; ?>
                                            </div>
                                        </a>
                                    </div>
                                    <!-- <a href="<?php echo_empty($url); ?>">
                                        <img <?php echo ($producte->imatge_petita) ? "class=resizeimg" : ""; ?> src="<?php echo_empty($thumbnail); ?>" alt="">
                                    </a> -->
                                </div>
                                <div class="contenidor-cnt">
                                    <a class="link" href="<?php echo_empty($url); ?>"> <span class="under-line-blk"><?php echo_empty($producte->post_title); ?></span></a>
                                    <a href="<?php echo_empty($url); ?>" class="dis-but"><?php _e("Discover", "esperitroca"); ?></a>
                                </div>
                            </li>
                        <?php endforeach; ?>
                    </ul>
                </div>
div.imagesequence { display: flex; }
.contenidor-list ul li .contenidor-img .nota-moviment img, .contenidor-list1 ul li .contenidor-img .nota-moviment img { width: 100%; float: left; transition: all .5s ease; }
.contenidor-list ul li .contenidor-img .nota-moviment  img, .contenidor-list1 ul li .contenidor-img .nota-moviment  img { max-height: 500px; min-height: 400px; object-fit: contain; }
.contenidor-list ul li .contenidor-img .nota-moviment img.active, .contenidor-list1 ul li .contenidor-img .nota-moviment img.active { display: block; }
#imagesequence img { transition: all 0.5s ease;}
img.in_movment.in_movment_rotate { display: none; }

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *