原创jQuery插件之图片自适应
效果图例如以下:
功能:使图片自适应居中位于容器内
限制:容器须要给定大小
用法:
1、引入jQuery。然后引入fitimg插件
2、给须要图片自适应的容器固定宽高
- 3、header .account .img { width: 40px; height: 40px; margin: 5px 5px; float: left; }
4、加入data-src属性
- <div class="img" data-src ="/Images/avatar.jpg"></div>
这里并没有写img标签,插件会自己主动生成img,把容器当成你想要呈现的图片就能够了
5、调用
- $(".img").fitimg('/Images/捕获.png')
括号内为假设data-src指向的图片载入失败的替补图片,假设该图片也载入失败,则该容器会清空容器内全部内容
源码:
- (function ($)
- {
- $.fn.extend({
- fitimg: function (errorimg)
- {
- $(this).each(function ()
- {
- if ($(this).data('src'))
- {
- $(this).empty()
- var img = document.createElement('img')
- $(this).append($(img))
- $(img).load(function ()
- {
- var parent = $(this).parent()
- var pWidth = parent.width()
- var pHeight = parent.height()
- var oWidth = $(this).width()
- var oHeight = $(this).height()
- if (oWidth / pWidth > oHeight / pHeight)
- {
- $(this).height(pHeight)
- var nWidth = pHeight * oWidth / oHeight
- $(this).width(nWidth)
- $(this).css('margin-left', -(nWidth - pWidth) / 2)
- }
- else
- {
- $(this).width(pWidth)
- var nHeight = pWidth * oHeight / oWidth
- $(this).height(nHeight)
- $(this).css('margin-top', -(nHeight - pHeight) / 2)
- }
- parent.css('overflow', 'hidden')
- }).error(function ()
- {
- if (errorimg)
- {
- $(this).parent().data('src', errorimg).fitimg()
- }
- else
- {
- $(this).parent().empty()
- }
- })
- $(img).attr('src', $(this).data('src'))
- }
- })
- return $(this)
- }
- })
- })(jQuery)
近期(20150831)又加了两个新的功能
1、等图片载入完毕才显示出来,以免因网络问题导致图片刚開始非常大,然后再由js缩放到恰当大小。这个过程不应让用户看见,所以做了一点小小的处理
2、加入图片自适应选项。曾经仅仅同意拉伸到和容器一样大,如今添加可选參数能够缩小到被容器包裹
新增的參数名叫iszoomin,默觉得放大,也就是说假设不传这个值表示进行放大操作
两种效果对照图例如以下
下面为插件最新的代码
- (function ($)
- {
- $.fn.extend({
- fitimg: function (errorimg, iszoomin)
- {
- $(this).each(function ()
- {
- $(this).empty()
- var img = document.createElement('img')
- $(this).append($(img))
- img.style.display = 'none'
- $(img).load(function ()
- {
- var parent = $(this).parent()
- var pWidth = parent.width()
- var pHeight = parent.height()
- var oWidth = $(this).width()
- var oHeight = $(this).height()
- if (oWidth / pWidth > oHeight / pHeight)
- {
- if (!iszoomin)
- {
- $(this).height(pHeight)
- var nWidth = pHeight * oWidth / oHeight
- $(this).width(nWidth)
- $(this).css('margin-left', -(nWidth - pWidth) / 2)
- }
- else
- {
- $(this).width(pWidth)
- var nHeight = pWidth * oHeight / oWidth
- $(this).height(nHeight)
- $(this).css('margin-top', (pHeight - nHeight) / 2)
- }
- }
- else
- {
- if (!iszoomin)
- {
- $(this).width(pWidth)
- var nHeight = pWidth * oHeight / oWidth
- $(this).height(nHeight)
- $(this).css('margin-top', -(nHeight - pHeight) / 2)
- }
- else
- {
- $(this).height(pHeight)
- var nWidth = pHeight * oWidth / oHeight
- $(this).width(nWidth)
- $(this).css('margin-left', (pWidth - nWidth) / 2)
- }
- }
- parent.css('overflow', 'hidden')
- img.style.display = ''
- }).error(function ()
- {
- if (errorimg)
- {
- $(this).parent().data('src', errorimg).fitimg(null, iszoomin)
- }
- else
- {
- $(this).parent().empty()
- }
- })
- $(img).attr('src', $(this).data('src'))
- })
- return $(this)
- }
- })
- })(jQuery)
2016/12/11更新
jQuery3.1已经公布,为了适配jQuery3.1,代码改动例如以下
- (function ($) {
- $.fn.extend({
- fitimg: function (errorimg, iszoomin) {
- iszoomin = typeof iszoomin === 'undefined' ? false : iszoomin
- $(this).each(function () {
- $(this).empty()
- var img = document.createElement('img')
- $(this).append($(img))
- img.style.display = 'none'
- $(img).on('load', function () {
- var parent = $(this).parent()
- var pWidth = parent.width()
- var pHeight = parent.height()
- var oWidth = $(this).width()
- var oHeight = $(this).height()
- if (oWidth / pWidth > oHeight / pHeight) {
- if (!iszoomin) {
- $(this).height(pHeight)
- var nWidth = pHeight * oWidth / oHeight
- $(this).width(nWidth)
- $(this).css('margin-left', -(nWidth - pWidth) / 2)
- }
- else {
- $(this).width(pWidth)
- var nHeight = pWidth * oHeight / oWidth
- $(this).height(nHeight)
- $(this).css('margin-top', (pHeight - nHeight) / 2)
- }
- }
- else {
- if (!iszoomin) {
- $(this).width(pWidth)
- var nHeight = pWidth * oHeight / oWidth
- $(this).height(nHeight)
- $(this).css('margin-top', -(nHeight - pHeight) / 2)
- }
- else {
- $(this).height(pHeight)
- var nWidth = pHeight * oWidth / oHeight
- $(this).width(nWidth)
- $(this).css('margin-left', (pWidth - nWidth) / 2)
- }
- }
- parent.css('overflow', 'hidden')
- img.style.display = ''
- }).on('error', function () {
- if (errorimg) {
- $(this).parent().data('src', errorimg).fitimg(null, iszoomin)
- }
- else {
- $(this).parent().empty()
- }
- })
- $(img).attr('src', $(this).data('src'))
- })
- return $(this)
- }
- })
- })(jQuery)
原创jQuery插件之图片自适应的更多相关文章
- 原创jquery插件treeTable(转)
由于工作需要,要直观的看到某个业务是由那些子业务引起的异常,所以我需要用树表的方式来展现各个层次的数据. 需求: 1.数据层次分明: 2.数据读取慢.需要动态加载孩子节点: 3.支持默认展开多少层. ...
- ASP.NET中使用jQuery插件实现图片幻灯效果
参照网上的资料及提供的jQuery插件实现图片幻灯效果. 1.页面前台代码: //头部引用 <head runat="server"><title>< ...
- JQuery插件让图片旋转任意角度且代码极其简单 - 摘自网友
JQuery插件让图片旋转任意角度且代码极其简单 2012-04-01 09:57:03 我来说两句 收藏 我要投稿 引入下方的jquery.rotate.js文件,然后通过$ ...
- jQuery插件实现图片展开效果,jquery.gallery。仿腾讯QQ空间说说图片展示效果。
公司的项目http://www.umfun.com/,有个说说的页面(和腾讯QQ空间说说一样),里面有个发表图片功能,上传完图片,需要点击展开的效果. 当时手里面事情比较多(公司就我一个前端),忙不过 ...
- 使用jquery插件实现图片延迟加载技术(懒加载)
有时我们看到一些大型网站,页面如果有很多图片的时候,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对 ...
- JQuery插件之图片轮播插件–slideBox
来源:http://www.ido321.com/852.html 今天偶然发现了一个比较好用的图片轮播插件—slideBox 先看看效果:http://slidebox.sinaapp.com/ 代 ...
- JQuery插件:图片上传本地预览插件,改进案例一则。
/* *名称:图片上传本地预览插件 v1.1 *作者:周祥 *时间:2013年11月26日 *介绍:基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari *插 ...
- 使用jquery插件实现图片延迟加载--懒加载技术
原文链接:http://www.cnblogs.com/lei2007/archive/2013/05/31/3110725.html 感谢作者.以下为原文,备忘仅供自己学习. 第一:lazyLoad ...
- JQuery插件让图片旋转任意角度且代码极其简单
引入下方的jquery.rotate.js文件,然后通过$("选择器").rotate(角度);可以旋转任意角度, 例如$("#rotate-image").r ...
随机推荐
- [Python爬虫] 之三十一:Selenium +phantomjs 利用 pyquery抓取消费主张信息
一.介绍 本例子用Selenium +phantomjs爬取央视栏目(http://search.cctv.com/search.php?qtext=消费主张&type=video)的信息(标 ...
- 恢复计算机崩溃数据的五款最佳Linux发行版
嗨,Linux 新手们!你们在尝试运行命令时有没有搞坏过计算机系统?我相信你们有过这种经历.这一幕经常发生:你想尝试运行命令,或者安装测试更新版,结果下一次重启时计算机就崩溃了.我在本文将逐一介绍五款 ...
- 再谈Cognos利用FM模型来做同比环比
很早之前已经讲过 <Cognos利用DMR模型开发同比环比>这篇文章里说的是不利用过滤器,而是采用 except (lastPeriods (-9000,[订单数据分析].[日期维度].[ ...
- Ubuntu简单搭建git私有服务
gitserver搭建过程 搭建gitserver过程记录 例如以下: 环境: serverUbuntu虚拟机(Boss),能通过网络訪问到(server地址:192.168.9.103). clie ...
- 【cocos2d-x 3.7 飞机大战】 决战南海I (七) 控制器的实现
控制器中的功能并不多,主要是以下这些 //对玩家分数的操作 CC_SYNTHESIZE_READONLY(SaveData *, m_saveData, SaveData); void update( ...
- .NET破解之爱奇迪(三)
本教程只能用于学习研究,不可进行任何商业用途.如有使用,请购买正版,尊重他人劳动成果和知识产权! .NET破解之爱奇迪(一) .NET破解之爱奇迪(二) 一打开软件,就看到各种注册和未注册提示信息,就 ...
- 对象 get和set方法
1.用途 用户定义的对象定义 getter 和 setter 以支持新增的属性. 示例:obj创建一个伪属性latest,它会返回log数组的最后一个元素. var obj = { log: ['ex ...
- LInux下inode空间报警-CROND出错导致/var/spool/postfix/maildrop/堆积
Linux下显示磁盘空间不足,,通过 df -ih 查询发现/dev/mapper/*****var 下的inode用满.inode介绍 通过 du -sh * 查询/目录下的问题,最终查到/var/ ...
- Hadoop-1.2.1学习之Job创建和提交源码分析
在Hadoop中,MapReduce的Java作业通常由编写Mapper和Reducer開始.接着创建Job对象.然后使用该对象的set方法设置Mapper和Reducer以及诸如输入输出等參数,最后 ...
- 聊聊iClient for Leaflet坐标转换问题
作者:非法小恋 背景 SuperMap iClient for JavaScript 9D产品想必大伙都用了一段时间了,针对新推出的三款客户端产品,Leaflet,OpenLayaers,Mapbox ...