zoukankan      html  css  js  c++  java
  • 当图片数量不确定的时候动态加载图片,并将图片显示在弹框中。

    展示效果:

               这一行的的图片是三张                                                                                                           这一行的图片是两张

                           

    通过效果图可以看出来当我们点击表格中每一行中“点击查看”按钮的时候需要获取到当前行中的图片,并展示在弹框中。

    思路:由于图片的数量不定,所以需要使用循环遍历图片,获取到的图片存放在表格中,但不让它显示,这样就不会破坏页面的展示的效果了。但这种方法会破坏表格中图片以后的数据获取出现错行,这种效果并不理想。所以我们需要将获取到的图片放到每一行的末尾显示。由于json数据没有length方法,所以在这里我们直接通过ajax获取到后台数据,所有的图片都存放在一个数组中,具体看代码:

    代码:

    1.使用ajax获取到图片对象:

    
    
    $(function(){
    $.ajax({
    type:'Post',
    url:'json/Approval.json',//json数据的url
    dataType:'json',
    success:function (data) {
    //获取到表格Id
    var table = document.getElementById("table");
    //通过for循环将获取的数据插入到表格中
    for(var i=0;i<data.length;i++) {

    var row = table.insertRow(table.rows.length);

    var c1 = row.insertCell(0);
    c1.innerHTML = data[i].studentname;

    var c2 = row.insertCell(1);
    c2.innerHTML = data[i].studentnum;
    var c3 = row.insertCell(2);
    c3.innerHTML = data[i].studentsacademy;
    var c4 = row.insertCell(3);
    c4.innerHTML = data[i].studentclass;

    var c5 = row.insertCell(4);
    c5.innerHTML = data[i].itemname;
    var c6=row.insertCell(5);
    c6.innerHTML = data[i].awardlevel;
    var c7=row.insertCell(6);
    c7.innerHTML = data[i].credit;
    var c8=row.insertCell(7);
    c8.innerHTML ="<button class='btn btn-link' onclick='chechkImg(this)'>点击查看</button>";
    var c9=row.insertCell(8);
    c9.innerHTML = "<button class='btn btn-link' onclick='Beizhu(this)'>查看备注</button>";
    var c10=row.insertCell(9);
    c10.innerHTML="<td><button class='btn btn-link' onclick='Agree(this)' >同意</button></td>"
    +"<td><button class='btn btn-link' onclick='Disagree(this)'>不同意</button></td>" ;
    var c11=row.insertCell(10);
    c11.innerHTML=data[i].remark;
    c11.style.display="none";
    var c12=row.insertCell(11);
    c12.innerHTML=data[i].pid;
    c12.style.display="none";
    //图片之前的固定列数是0-11,共12列,所以我们从第13列开始插入获取到的图片路径,在for循环中就是从12开始

    //循环停止的条件是获取到的图片数量加上固定列数,通过变量j将获取到的图片插入到每一列中。
    var j=0;
    for( var x=12;x<(data[i].img.length+12);x++){
    var c13=row.insertCell(x);
    c13.innerHTML=data[i].img[j++];
    c13.style.display="none";


    }
    }

    }

    });
    });




    2.点击按钮“点击查看”的时候调用函数 chechkImg(obj)
    函数 chechkImg(obj)中的内容:
    
    
    //点击查看出现证明材料
    function chechkImg(obj) {
        //获取到表格的Id
        var table = document.getElementById("table");
        //获取到当前选中的行
        rowIndex = obj.parentNode.parentNode.rowIndex;
        //获取到当前选中的行的总列数
       var colums=table.rows[rowIndex].cells.length;
      console.log(colums);
      var layer = layui.layer;
       //弹框使用的layui的弹出层
        layer.open({
            type:1,
            title:"查看证明材料",
            skin: 'demo-class',
            scrollbar: false,
            area: ['500px', '500px'],
            shadeClose: true, //点击遮罩关闭
            content:'<div id="photoForm1"></div>'
               ,//用来存放图片的容器
            success:function (layero,index) {
                //获取表格中的列
                var oTr = obj.parentNode.parentNode;
                var aTd = oTr.getElementsByTagName('td');
                var photoForm = "<div >";
                //colums表示当前图片所在行的总列数。
                    for(var x=12;x<colums;x++){
                        photoForm +='<div><div class="float"><img  src="'+aTd[x].innerHTML+'"  /></div>'
                    }
                 photoForm += "</div>";
                $("#photoForm1").html(photoForm);
                var img=document.getElementsByTagName("img");
                for(var j=0;j<img.length;j++){
                    img[j].onload = function () {
                        var nowHeight = ReSizePic(this); //设置图片大小
                        this.parentNode.style.display = 'block';
                        var oParent = this.parentNode;
                        if (nowHeight) {
                            oParent.style.paddingTop = (oParent.offsetHeight - nowHeight) / 6 + 'px';
                        }
                    };
                }
                }
    
        });
    }
    设置图片的居中显示,代码:
    //设置图片居中显示
    function ReSizePic(ThisPic) {
        var RePicWidth = 200; //这里修改为您想显示的宽度值
    
        var TrueWidth = ThisPic.width; //图片实际宽度
        var TrueHeight = ThisPic.height; //图片实际高度
    
        if(TrueWidth>TrueHeight){
            //宽大于高
            var reWidth = RePicWidth;
            ThisPic.width = reWidth;
            //垂直居中
            var nowHeight = TrueHeight * (reWidth/TrueWidth);
            return nowHeight;  //将图片修改后的高度返回,供垂直居中用
        }else{
            //宽小于高
            var reHeight = RePicWidth;
            ThisPic.height = reHeight;
        }
    }

    调用:

    这样就可以成功显示了,并且还不会影响表格中其他属性值得获取。





     

    有一种落差是,你配不上自己的野心,也辜负了所受的苦难
  • 相关阅读:
    axios的全局配置
    Vue:vue-router编程式导航
    【spring源码系列】之【Bean的属性赋值】
    【spring源码系列】之【Bean的实例化】
    【spring源码系列】之【Bean的生命周期】
    【spring源码系列】之【BeanDefinition】
    【spring源码系列】之【xml解析】
    【spring源码系列】之【环境搭建】
    mysql去重
    Nacos 服务推送和发现
  • 原文地址:https://www.cnblogs.com/ejll/p/10974001.html
Copyright © 2011-2022 走看看