展示效果:

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

                       

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

思路:由于图片的数量不定,所以需要使用循环遍历图片,获取到的图片存放在表格中,但不让它显示,这样就不会破坏页面的展示的效果了。但这种方法会破坏表格中图片以后的数据获取出现错行,这种效果并不理想。所以我们需要将获取到的图片放到每一行的末尾显示。由于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;
    }
}

 

 


调用:

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





 

posted on 2019-06-04 15:53  EJLL  阅读(855)  评论(2编辑  收藏  举报