可以裁剪外部图像的jQuery插件

Posted

技术标签:

【中文标题】可以裁剪外部图像的jQuery插件【英文标题】:Jquery plugin that can crop external images 【发布时间】:2015-04-16 06:00:48 【问题描述】:

我正在尝试将 Lazyload 图像裁剪为正确的大小。我有下面给出的简单 jquery 插件,它可以通过调整图像 url 来调整图像大小和裁剪图像以正确大小。在 Lazyload 插件加载图像后,此 jQuery 代码会自动将图像裁剪为正确的大小。但它不能裁剪所有图像,它只裁剪所有图像中的一张。

小提琴:http://jsfiddle.net/e0myc0po/4/ 看到它只裁剪了第 3 幅图像!

JS:

外部资源:https://cdnjs.cloudflare.com/ajax/libs/jquery.lazyloadxt/1.0.5/jquery.lazyloadxt.js

$.extend($.lazyLoadXT, 
    onload:myfunc
);

function myfunc()
    var w = 200;
var h = 150;
$('#crop').find('img').each(function(n, image)
  var image = $(image);
  image.attr(src : image.attr('src').replace(/s\B\d2,4/,'s' + w + '-h' + h +'-c'));
  image.attr('width',w);
  image.attr('height',h);
 );


function myfunc()
    var w = 200;
var h = 150;
$('#another-crop').find('img').each(function(n, image)
  var image = $(image);
  image.attr(src : image.attr('src').replace(/s\B\d2,4/,'s' + w + '-h' + h +'-c'));
  image.attr('width',w);
  image.attr('height',h);
 );

HTML:

1
<div id="crop">
<img data-src=""/>
</div>
<br/>
2
<div id="crop">
<img data-src=""/>
</div>
<br/>
3
<div id="another-crop">
<img data-src=""/>
</div>
<br/>
4
<div id="another-crop">
<img data-src=""/>
</div>

所以我的问题是为什么它不裁剪所有图像,解决方案是什么? 谢谢。

【问题讨论】:

【参考方案1】:

简单。您有两个或多个 html 标记的 ID 和两个函数 myfunc() 的声明。单个页面上任何标签元素的ID都应该是唯一的!! :)

<div id="crop">
....
<div id="crop-foo">
....
<div id="crop-something-else">

将 id="crop" 更改为 class="crop" 然后在 JS 中将 #crop 更改为 .crop 同样适用:#another-crop / id="another-crop" - 将其更改为一个类

也做一个 myFunc()

function myfunc()
    var w = 200;
var h = 150;
$('#crop').find('img').each(function(n, image)
  var image = $(image);
  image.attr(src : image.attr('src').replace(/s\B\d2,4/,'s' + w + '-h' + h +'-c'));
  image.attr('width',w);
  image.attr('height',h);
 );
$('#another-crop').find('img').each(function(n, image)
  var image = $(image);
      image.attr(src : image.attr('src').replace(/s\B\d2,4/,'s' + w + '-h'         + h +'-c'));
  image.attr('width',w);
  image.attr('height',h);
 );

工作示例:http://jsfiddle.net/e0myc0po/6/

【讨论】:

您的意思是它不适用于 id?但是我在裁剪的同一页面上有不同的类和不同的 id,这意味着我必须在同一页面上为不同的类和不同的 id 实现此代码。我该怎么办? 我必须在同一页面上使用不同大小的不同类别和不同 id 的图像,我该怎么办? 将一个类命名为“size-one”,并为每个 .size-one 将图像的大小更改为某个宽度和高度。将另一个 div 类命名为“size-two”,并以此类推的方式将图像的大小更改为首选。 我已经关注了,但它只裁剪了 3 号和 4 号图像。小提琴:jsfiddle.net/e0myc0po/8 jsfiddle.net/e0myc0po/10 最简单的解决方案。将函数名称更改为 myfunc2() 并在 myfunc() 中触发它【参考方案2】:

不需要两次定义相同的函数。检查这个小提琴http://jsfiddle.net/3xphkmsq/你只需要提到class而不是id

【讨论】:

您的意思是它不适用于 id?但是我在裁剪的同一页面上有不同的类和不同的 id,这意味着我必须在同一页面上为不同的类和不同的 id 实现此代码。我该怎么办? 你可以做多个id选择$("#crop,#crop1,#crop2").find()。这样您就不必为每个 id 一次又一次地定义函数。 我必须在同一页面上使用不同大小的不同类别和不同 id 的图像,我该怎么办? 我已经关注了,但它只裁剪了 3 号和 4 号图像。小提琴:jsfiddle.net/e0myc0po/8 因为正如我告诉您的那样,您的覆盖myfunc 没有用相同的名称定义函数两次。看到这个小提琴jsfiddle.net/kaz6gv51

以上是关于可以裁剪外部图像的jQuery插件的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery/Java 裁剪和上传图像

加载此 jquery 插件后删除特定类

如何在 Rails 中使用 JQuery Cropper 插件?

jQuery插件分享Cropper——一个简单方便的图片裁剪插件

jQuery插件使用cropper实现简单的头像裁剪并上传

jQuery Jcrop 图像裁剪来源