当前位置: 代码迷 >> JavaScript >> 脚本的传播
  详细解决方案

脚本的传播

热度:99   发布时间:2023-06-13 12:50:47.0

我可能不应该尝试这样做,但是到目前为止,我已经不想放弃了。 我想创建自己的灯箱类型脚本。 我可以使用ligthbox类创建一个绝对div,它会覆盖整个页面。 然后创建一个固定的img,并在加载时进行动画处理。 我也有导航箭头可在照片中移动。 当我单击箭头时,所有作品都会接受,它会创建新的关闭X和箭头。 我不明白,因为这是通过未附加到箭头功能的动画功能完成的。

我添加了event.stopPropagation(); 箭头功能和动画功能,但这没有用。

启动所有内容的功能。

jQuery(".marks-lightbox img").click( function() {

  var Img = jQuery(this),
      cImg = Img.attr("src"),
      allImg = jQuery(".marks-lightbox img");

  //finding the current img from the available images

  for(i=0; i < allImg.length; i++) {

    if( jQuery(allImg[i]).attr("src") == Img.attr("src") ) {

      lbImgCurrent = i;

    }
  }

  makeLightBox() 

});


function makeLightBox() {

    var bodyHeight = jQuery("body").height(),
        lightbox = jQuery("<div>").addClass("lightbox").css({"width":"100vw","height":bodyHeight}),
        scrollTop = 72,
        lbContainer = jQuery("<div>").addClass("lbContainer"),
        lbImg = jQuery(".marks-lightbox img"),
        imgSRC = jQuery(lbImg[lbImgCurrent]).attr("src"),
        lbClose = jQuery("<span>").addClass("lb-close").text("X");

    jQuery("body").prepend(lightbox);

    lbContainer.appendTo(".lightbox");

    jQuery('<img src="'+ imgSRC +'">').load(function() {

      jQuery(this).appendTo(".lbContainer").css("display","none").addClass("lb-image");

      var w = jQuery(".lb-image").width(),
          h = jQuery(".lb-image").height(),
          lbw = lightbox.width(),
          margin = (lbw - w) /2;

      jQuery(this).appendTo(".lightbox").css({"position":"fixed","display":"block","width":0,"height": 0}).animate({"top":scrollTop,"width":w,"height":h,"margin-left":margin, "margin-right":margin},1000,function(event){

        var lbimg = jQuery(this),
            lbH = lbimg.height() + 63,
            lbLeft = lbimg.offset().left,
            lbW = lbimg.width(),
            larrow = jQuery("<div><</div>").addClass("left-arrow-lb lb-arrow"),
            rarrow = jQuery("<div>></div>").addClass("right-arrow-lb lb-arrow");

        larrow.appendTo("body").css({"position":"fixed","top":lbH/2,"left":lbLeft+18});

        rarrow.appendTo("body").css({"position":"fixed","top":lbH/2,"left":lbLeft+lbW-90});;

        lbClose.appendTo(".lightbox").css({"position":"fixed","top": lbH,"left": lbLeft+lbW - 18});

      });
    });
}

这是点击功能

jQuery("body").on("click",".left-arrow-lb", function() {
    console.log(jQuery(this));
    var lbImgLength = jQuery(".marks-lightbox img").length,
        lbImg = jQuery(".marks-lightbox img");

    lbImgCurrent = (lbImgCurrent < 1 ) ? lbImgLength : lbImgCurrent -1;

    var imgSRC = jQuery(lbImg[lbImgCurrent]).attr("src");
    console.log(imgSRC);
    jQuery(".lb-image").attr("src",imgSRC);

});

每次单击都会创建一个加载新的img scr并为照片添加动画(出乎意料),并创建新的箭头并关闭x。

我发现这是on(“ load” ...每次加载图像时都在工作。所以我创建了一个var reload并将其设置为true。在on(load ...函数中,我说如果不是true的话false。在箭头功能中,将重载设置为false,这阻止了on(load ...)工作重载。

  相关解决方案