neverlandcx

需求1:做项目的时候有这么样一个需求,需要把两张图片放在一个div里预览,两张图片只有大小限制,没有尺寸限制,要求缩放图片时要把两张图片等比例放在div里面,图片较小时不拉伸。

分析:由于两张图片虽然大小没有限制,但大图一般在500*400,小图一般是200*300,而div由于页面布局的限制,固定在420*240,于是粗略地将左右侧分割为:300*240,110*240两部分,页面缩放后效果图如下:

具体实现方式如下:

jn.pl.material.ChooseTpl.prototype._scaleImg = function (img, maxWidth, maxHeight) {

    //缩放第一张图片

    if (img.width > 0 && img.height > 0) {

        var rate = (maxWidth / img.width < maxHeight / img.height ?

                    maxWidth / img.width : maxHeight / img.height);

    }

    var newImg = {};

    if (rate < 1) {

        newImg.width = (img.width) * rate;

        newImg.height = (img.height) * rate;

    } else {

        newImg.width = maxWidth;

        newImg.height = maxHeight;

    }

    return newImg;

};

 

//缩放图片尺寸

        var imgContainers = baidu.q(\'preview-img-container\');

        baidu.each(imgContainers, function(item){

            var img1 = item.children[0];

            var newImg1 = me._scaleImg(img1, 300, 240);

            img1.width = newImg1.width;

            img1.height = newImg1.height;

           

            var img2 = item.children[1];

            var newImg2 = me._scaleImg(img2, 110, 240);

            img2.width = newImg2.width;

            img2.height = newImg2.height;

        });

 

这个页面在ie下样式出了点小问题,

<div>

    <span style=”float:left”>左侧样式</span>

<span style=”float:right”>查看大图</span>

</div>

这种情况下必须强制给div一个height,否则“左侧样式”和”查看大图”会折成两行。

需求2:页面上有查看大图功能,要求鼠标放上去的时候能够出现一个浮层可以显示图片的真实尺寸,浮层与“查看大图”链接右对齐。

实现方式如下:

me.list.delegateEvent(\'mouseover\');

    me.list.delegateEvent(\'mouseout\');

    me.list.addListener(\'CMD:mouseover:SHOW_PIC\', function(anchor) {

        var leftId = anchor.getAttribute("data-id");

        var picDiv = baidu.g(\'show-big-pic-\' + leftId);

        baidu.show(picDiv);

        if (anchor.tagName.toLowerCase() == \'a\') {

            var position = baidu.dom.getPosition(anchor);

           

            picDiv.style.left = (position.left - picDiv.offsetWidth + 60) + \'px\';

            picDiv.style.top = (position.top + 15) + \'px\';

        }

       

    });

   

    me.list.addListener(\'CMD:mouseout:SHOW_PIC\', function(anchor) {

        var leftId = anchor.getAttribute("data-id");

        var picDiv = baidu.g(\'show-big-pic-\' + leftId);

        baidu.hide(picDiv);

});

注意:这里取大图的尺寸要使用offsetWidth而不是width,因为offsetWidth是numeric,能参与计算,而width是string.

offsetWidth和width(标准中的值)一样,指的是content+padding+border,如果有vertical scrollbar,则包含其值(这不同于clientWidth).

分类:

技术点:

相关文章:

  • 2022-01-02
  • 2021-11-07
  • 2022-01-02
  • 2022-01-02
  • 2021-12-18
  • 2021-09-22
  • 2021-12-31
  • 2021-10-12
猜你喜欢
  • 2021-11-04
  • 2021-12-09
  • 2021-11-01
  • 2018-01-29
  • 2021-10-23
  • 2021-12-28
  • 2021-10-12
相关资源
相似解决方案