通过ajax调用减少图片数量时,无法正确显示平滑滑块上的图片幻灯片

我有一个ajax调用,它从后端获取数据。我使用数据绘制画布”,然后将它们放到幻灯片中。当我按搜索按钮时,它将得到我选择的结果数量。但是,当减少显示结果的数量时,例如,我首先将搜索范围限制为20,然后限制为10,画布的div开始翻倍,并且容易发生奇怪的事情。

我尝试使用以下内容尝试在发出新请求时重置滑块。

$('.search').on('click',function () {
    slickReset.slick('setPosition');
});

什么也没发生。我不知道如何正确显示幻灯片。

下面是我的代码段。这是一个gif,可帮助您理解我要说的内容。 https://imgur.com/a/fK9nC6G

感谢您的帮助。

编辑:我尝试将$('#search-slider').html("");添加到我的ajax调用的开始。这将第二选择的结果数放在滑块的开头,但是我仍然在这些结果的末尾添加了其他div。

P.S。 该代码段将无法运行,因为它取决于我的后端数据。

$(function() {


  $('#search').click(function() {
    var nameVal = $('#shouhinName').val();
    var makerVal = $('#makerName').val();
    var categoryVal = $('#selectText').val();
    var sliderVal = $('#hideme').val();

    $.ajax({
      type: "POST",url: "shelf/test",data: {


        shouhinName: nameVal,makerName: makerVal,selectText: categoryVal,best: sliderVal

      },success: function hi(j_data) {




        alert(j_data.url);
        
        let index = 0;
        const display = "table"; 
        const x = 0;
        const y = 0;
        var hdnName = document.getElementById("sendServ");
        document.body.style.display = display;

        for (const id of j_data.itemid) {

          $('.search-items').slick('slickRemove',0);

        }


        canvasArr = [];
        for (const image of j_data.url) {

          const canvas = document.createElement("canvas");
          canvas.setattribute("name","canvas");
          const ctx = canvas.getcontext("2d");


         
          canvas.id = "option" + [index];

          var canId = canvas.id;
          var tooltip = j_data.tooltip;
         
          canvas.setattribute('width','75px');
          canvas.setattribute('padding-top','56.25%');
          canvas.setattribute('object-fit','contain');
          canvas.setattribute('data-html','true');
          // canvas.title = "hi";
          // console.log('#'+ canvas.id);

          var div = document.createElement("div");
          div.setattribute('data-html','true');
          div.id = j_data.itemid[index]; //image.slice(26,34);


          
        
          drawImages(canvas);
        
          canvas.addEventListener("click",optionClicke,false);

        
          var text = j_data.tooltip[index];
         
          div.title = text;
          document.getElementById('search-slider').appendChild(div);
          document.getElementById(div.id).appendChild(canvas);
     
          index++;
         
        }

   

        function drawImages(canvas) {
         
          const ctx = canvas.getcontext("2d");
          const background = new Image();

       
          index = canvas.id.replace(/\D/g,"");

       
          if (j_data.url[index] !== '/check/assets/img/noimage.png') {
            background.src = "/check/assets/img/" + j_data.url[index];
          } else {
            background.src = '/check/assets/img/noimage.png'
          }


         
          background.onload = function() {

            ctx.drawImage(background,canvas.width,canvas.height);
          };
    
        }

        function drawX(canvas,item) {
          const ctx = canvas.getcontext("2d");
         
          console.log(canvas.id);
     

          ctx.beginPath();
          ctx.arc(40,75,25,2 * Math.PI,false);
          ctx.lineWidth = 5;
          ctx.strokeStyle = "#FF0000";
          ctx.closePath();
          ctx.stroke();
          console.log(item);
          hdnName.value = item;

        }


        function clear(canvas) {


          canvas.getcontext("2d").clearRect(0,canvas.height);

          drawImages(canvas);


        }

        function optionClicke(e) {
          log = true;
          const canvas = document.getElementsByName("canvas");
          var hdnName = document.getElementById("sendServ");
          let index = 0;


          for (const option of canvas) {
            if (log)
          
              log = false;
            if (e.target.id === option.id) {
           
              const item = j_data.itemid[index];
              console.log('draw' + item);
              console.log(index);
             
              drawX(option,item);

            } else {
         
              clear(option);
         
            }
            index++;
          }

        }



       

        // need to make the images line up
        $('.search-items').slick('unslick').slick('reinit');
        $(document).ready(function() {
         var slickReset = $('.search-items').not('.slick-initialized').slick({
            infinite: false,//true
            slidesToShow: 8,slidesToScroll: 8,arrows: true,centerMode: false,width: 200,prevArrow: $('.prev'),nextArrow: $('.next')
          });
        });

      },error: function(xhr,status,error) {
        console.log("post error");
        console.log(error);
        alert(error);
      },complete: function(xhr,status) {
        console.log("fin");
      },});
  });
});
 <div class="search-items" id="search-slider">

saraxiaoxi 回答:通过ajax调用减少图片数量时,无法正确显示平滑滑块上的图片幻灯片

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3162809.html

大家都在问