1

at the beginning of using PhotoSwipe I have issue with

Uncaught ReferenceError: PhotoSwipe is not defined at openPhotoSwipe (base.js:1821) at base.js:1825

I have properly imported Core CSS file, Skin CSS file, Core JS file and UI JS file as described at official PhotoSwipe site - Initialization - Step 1: include JS and CSS files

http://photoswipe.com/documentation/getting-started.html

Then, I followed step 2, copy complete HTML code and paste in my Code Editor

Step 3... JavaScript implementation (from official PhotoSwipe site)

// PhotoSwipe
var openPhotoSwipe = function() {
    var pswpElement = document.querySelectorAll('.pswp')[0];

    // build items array
    var items = [{
        src: 'https://farm2.staticflickr.com/1043/5186867718_06b2e9e551_b.jpg',
        w: 964,
        h: 1024
      },
      {
        src: 'https://farm7.staticflickr.com/6175/6176698785_7dee72237e_b.jpg',
        w: 1024,
        h: 683
      }
    ];

    // define options (if needed)
    var options = {
      // optionName: 'option value'
      // for example:
      index: 0 // start at first slide
    };

    var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options); < --In Console this is the problem

    gallery.init();
    };

openPhotoSwipe();

document.getElementById('btn').onclick = openPhotoSwipe;
<!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">

  <!-- Background of PhotoSwipe. 
         It's a separate element, as animating opacity is faster than rgba(). -->
  <div class="pswp__bg"></div>

  <!-- Slides wrapper with overflow:hidden. -->
  <div class="pswp__scroll-wrap">

    <!-- Container that holds slides. PhotoSwipe keeps only 3 slides in DOM to save memory. -->
    <div class="pswp__container">
      <!-- don't modify these 3 pswp__item elements, data is added later on -->
      <div class="pswp__item"></div>
      <div class="pswp__item"></div>
      <div class="pswp__item"></div>
    </div>

    <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
    <div class="pswp__ui pswp__ui--hidden">

      <div class="pswp__top-bar">

        <!--  Controls are self-explanatory. Order can be changed. -->

        <div class="pswp__counter"></div>

        <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>

        <button class="pswp__button pswp__button--share" title="Share"></button>

        <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>

        <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>

        <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
        <!-- element will get class pswp__preloader--active when preloader is running -->
        <div class="pswp__preloader">
          <div class="pswp__preloader__icn">
            <div class="pswp__preloader__cut">
              <div class="pswp__preloader__donut"></div>
            </div>
          </div>
        </div>
      </div>

      <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
        <div class="pswp__share-tooltip"></div>
      </div>

      <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>

      <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>

      <div class="pswp__caption">
        <div class="pswp__caption__center"></div>
      </div>

    </div>

  </div>

</div>

One note: When I remove openPhotoSwipe(); from JavaScript, and when click on button to open photoswipe, there is no error in console, but open slider with very strange css, practically open an image but I can not change images because no arrows and css is something strange.

Practically I want to load slider immediately without clicking on the button.

Any idea how to solve this issue?

Mile Mijatović
  • 2,948
  • 2
  • 22
  • 41
  • Can you include the full code of the webpage, so we can see where/how you are creating the reference to the Photoswipe library? Because it looks like you are calling that function before that library is fully loaded – Nik Weiss May 03 '17 at 14:34
  • First I clone Git repository from here - https://github.com/dimsemenov/PhotoSwipe ... PhotoSwipe JS and CSS files from dist folder I implemented in my C:\xampp\htdocs\project-html\src\assets\js folder, then source files (.JS and .SCSS) from src/ folder to my C:\xampp\htdocs\project-html\src\assets\style folder. Then I build project with gulp build , then I type command gulp watch. All css files are automatically implemented in C:\xampp\htdocs\project-html\build\base.css (base.css is in head) and JavaScript files are at the end of body tag as it should be. Do you have idea? – Mile Mijatović May 03 '17 at 16:17
  • Now I found this in website documentation - All code in the documentation is pure Vanilla JS and supports IE 8 and above. If your website or app uses some JavaScript framework (like jQuery or MooTools) or you don't need to support old browsers – feel free to simplify the code. What do you think, can this cause a problem? – Mile Mijatović May 03 '17 at 17:33

1 Answers1

1

I can not see you whole page i think that you are trying to invoke PhotoSwipe before you load the library. Roughly speaking, your code should look like this:

<head>
    <script src="path/to/photoswipe.min.js"></script>
    <script src="path/to/photoswipe-ui-default.min.js"></script>
    <link rel="stylesheet" href="path/to/photoswipe.css">
    <link rel="stylesheet" href="path/to/default-skin/default-skin.css">
</head>
<body>
    Your content...
    <script>
        var openPhotoSwipe = function() {
            var pswpElement = document.querySelectorAll('.pswp')[0];
            var items = [{
                src: 'https://farm2.staticflickr.com/1043/5186867718_06b2e9e551_b.jpg',
                w: 964,
                h: 1024
            },
              {
                  src: 'https://farm7.staticflickr.com/6175/6176698785_7dee72237e_b.jpg',
                  w: 1024,
                  h: 683
              }
            ];
            var options = {
                index: 0
            };
            var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options); < --In Console this is the problem
            gallery.init();
        };
        openPhotoSwipe();
        document.getElementById('btn').onclick = openPhotoSwipe;
    </script>
</body>
Cromwell
  • 496
  • 1
  • 6
  • 24
  • 1
    First I clone Git repository from here - github.com/dimsemenov/PhotoSwipe ... PhotoSwipe JS and CSS files from dist folder I implemented in my C:\xampp\htdocs\project-html\src\assets\js folder, then source files (.JS and .SCSS) from src/ folder to my C:\xampp\htdocs\project-html\src\assets\style folder. Then I build project with gulp build , then I type command gulp watch. All css files are automatically implemented in C:\xampp\htdocs\project-html\build\base.css (base.css is in head) and JavaScript files are at the end of body tag as it should be. Do you have idea? – Mile Mijatović May 03 '17 at 16:17
  • Now I found this in website documentation - All code in the documentation is pure Vanilla JS and supports IE 8 and above. If your website or app uses some JavaScript framework (like jQuery or MooTools) or you don't need to support old browsers – feel free to simplify the code. What do you think, can this cause a problem? – Mile Mijatović May 03 '17 at 17:33
  • 1
    Could be an error due to Gulp. It might be adding the JavaSript files at the and of the document and still order of the scripts could be wrong. Try ordering them manually. – Cromwell May 04 '17 at 07:10
  • Yes, you are right, in inspect element photoswipe and photoswipe are after base.js, I need to add before. I will try – Mile Mijatović May 04 '17 at 08:21
  • Thank you Cromwell, its ok now. – Mile Mijatović May 04 '17 at 10:29
  • 1
    @MileMijatovic you are welcome. you can accept the answer if it is ok for your solution. – Cromwell May 04 '17 at 11:09