jq实现图片的轮播,以及图片的等比例缩放

这几天一直在弄一个项目的大屏幕的问题,老大的要求一开始是图片只需要实现轮播就 Ok了,但是随着项目的进行,需求也是在不断的改变,最终希望我可以在图片轮播的同时,在加上动画效果,使其可视化效果很好,废话就不说了,直接上代码吧。
1.实现图片的轮播
这样的方法有很多,但是用原生的js会出现当图片播放完毕,会突然回到第一张,用户体验不是很好,所以我选择了用jquery来写图片的轮播。
这里写图片描述
2.对后台图片的处理
从后台取出的图片,有长方形的,正方形的,对于不同形状的图片,我们需进行不同的处理,这样才能保证图片是等比例缩放的,第一次写的时候,我没有考虑到容器的大小,最终代码出现了bug,其实图片的等比例缩放类似于js的缩略图。
具体的实现步骤:
1》实现图片的一边的缩放,使其一边充满屏幕
2》第一次缩放后的图片居于容器的中间
3》第二次实现对图片的缩放,并加上动画

(function ($) {
    $.fn.slide = function (options) {
        var defaults = {
        };

        var opts = $.extend({}, defaults, options);
        var delaystr = "all " + 1 + "s ease-in";
        var _this = $(this);
        var legth = _this.find("ul").find("li").length;
        var Height = _this.height();//容器的高度
        var Width = _this.width();//容器的宽度
        var Domescale = Width / Height;      
        var _firstLi = _this.find("ul").find("li").eq(0)
        var _firstImg = _firstLi.find("img");
        var imgwidth = _firstImg.width();//图片的宽度
        var imgheight = _firstImg.height();//图片的高度
            init(_firstImg); //第一张图片的初始化
            magnify(_firstImg);            
        var $dome = $(this).find("ul");
        var _left = $(this).width();


        if (legth > 1) {
            setInterval(function change() { var _this = $dome.find("li").eq(1).find("img");//第二张图片 $dome.css("left", "-" + _left + "px"); $dome.find("li").eq(0).appendTo($dome); init(_this); magnify(_this) $dome.css({ left: 0 }); }, opts.speed*1000);

        }

        //初始化第一张图片
        function init(dom) {           
            var imgwidth = dom.width();//图片的宽度
            var imgheight = dom.height();//图片的高度
            var imgscale = imgwidth / imgheight;
                if (Domescale < imgscale) { var _left = 0; var _top = 0; imgwidth = Width; (imgheight < Height || imgwidth < Width) ? _top = (Height - imgheight) / 2 : _top = (imgheight - Height) / 2 } else if (Domescale > imgscale) { var _top = 0; var _left = 0; imgheight = Height; imgwidth = imgheight * imgscale; (imgheight < Height || imgwidth < Width) ? _left = (Width - imgwidth) / 2 : _left = (imgwidth - Width) / 2 } else if (Domescale == imgscale) { imgwidth = Width; imgheight = Height; };
                var newheight = parseInt(imgheight);
                var nwewidth = parseInt(imgwidth);

                dom.css({ "height": newheight, "width": nwewidth, "margin-top": _top + "px", "margin-left": _left + "px", })
            }

        //放大倍数
        function magnify(dom) {
            var imgwidth = dom.width();//图片的宽度
            var imgheight = dom.height();//图片的高度
            var imgscale = imgwidth / imgheight;
            var scale;
            if (imgwidth == Width) { scale = Height / imgheight } else { scale = Width / imgwidth; };
            var s = "scale(" + scale + "," + scale + ")";
            dom.css({ "transition": delaystr, "transform": s, })
            dom.parent("li").siblings("li").find("img").css({ "transition": "", "transform": "", })
        }

    }

})(jQuery);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值