0

I created fancybox via jquery but I want to write it in some nicer way. I am interesting in overlay variable.

I think that overlay content can be written in php partial folder and transfer to jquery, but how it is done in more professional way?

This is my code:

 /*
    Gallery Fancybox
    */

    var overlay = $('<div id="overlay"><div id="overlay__left-arrow-block"><span id="overlay__left-arrow"></span></div><div id="top-margin"></div><div id="overlay__img-wrapper"></div><div id="overlay__bottom-slider"></div><div id="overlay__right-arrow-block"><span id="overlay__right-arrow"></span></div><div id="overlay__close-btn">Zavrieť</div></div>'),
        gallery = $('.item-detail__gallery'),
        galleryImgs = gallery.find('img'),
        galleryImgWrappers = gallery.find('a'),
        image = $('<img>', {class: 'lightbox__img'}),
        loadingImg = $('<img>', {src: '/bazar/assets/img/icons/circle.svg', class: 'loading-img'});

    // Create FANCYBOX

    // Start overlay
    overlay.appendTo('body').hide();

    // Show overlay after click on a elemet of gallery
    gallery.find('a').on('click', function(event) {
        event.preventDefault();

        // Define avriables
        var galleryImgWrapperHref = $(this).attr('href');

        // Show overlay
        overlay.appendTo('body').show();

        // Show chosen image in overlay
        image.attr('src', galleryImgWrapperHref);

        // Show loadin image before image is loaded
        loadingImg.appendTo('#overlay__img-wrapper');

        // Image will show after it will be loaded, before loading image is showed
        image.on('load', function() {
            image.appendTo('#overlay__img-wrapper');
            loadingImg.hide(); // Hide loading image afet image was loaded
        });

        // Make images slider for thumbnails from gallery
        galleryImgs.each(function() {

            var src = $(this).attr('src'),
                href = $(this).parent().attr('href');
                thumbWrapper = $('<a/>', {id: 'overlay__img-thumb-wrapper'}),
                thumbImg = $('<img>', {id: 'lightbox__img-thumb'});

            // Add thumb image src and id from original image and href to a element from original e element in gallery
            thumbWrapper.attr('href', href);
            thumbImg.attr('src', src);
            thumbWrapper.html(thumbImg); // Put image into thumbImgWrapper
            thumbWrapper.appendTo('#overlay__bottom-slider');

            // If src of thumb and main image is the same then mark thumb as active
            if ((thumbImg.attr('src').substring(thumbImg.attr('src').lastIndexOf("/") + 1) == image.attr('src').substring(image.attr('src').lastIndexOf("/") + 1))) {
                thumbWrapper.addClass('img-active');
            }
        })

    });

Thank you

2

1 Answer 1

1

ECMAScript 5

You should concatenate strings.

First example

$(function() {
  var html = '<div>' +
               '<div>Foo</div>' +
               '<div>Bar</div>' +
               '<div>Baz</div>' +
             '</div>';
           
  $('body').append(html);
});
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>

Second example

$(function() {
  var html = "<div>";
      html += "  <div>Foo</div>";
      html += "  <div>Bar</div>";
      html += "  <div>Baz</div>";
      html += "</div>";
    
  $("body").append(html);
});
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>

ECMAScript 6

You can use template literals.

$(() => {
  let html = `<div>
                <div>Foo</div>
                <div>Bar</div>
                <div>Baz</div>
              </div>`;
            
  $('body').append(html);
});
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.