【问题标题】:Div width and height based on inner image width & height in jquery resizable() function基于jquery resizable()函数中的内部图像宽度和高度的div宽度和高度
【发布时间】:2018-03-13 12:41:16
【问题描述】:

您好,我有一个可调整大小的 jquery div,以及此 div 内的图像。

$( function() {
  var inputLocalFont = document.getElementById("user_file");
  inputLocalFont.addEventListener("change",previewImages,false);
  function previewImages(){
    var fileList = this.files;
    var anyWindow = window.URL || window.webkitURL;
    for(var i = 0; i < fileList.length; i++){
      var objectUrl = anyWindow.createObjectURL(fileList[i]);
      $('.new-multiple').append('<div class="img-div"><img src="' + objectUrl + '" class="newly-added" /></div>');
      window.URL.revokeObjectURL(fileList[i]);
    }

    $( ".img-div" ).draggable();
    $( ".img-div" ).resizable();
    $(".newly-added").on("click", function(e) {
      $(".newly-added").removeClass("img-selected");
      $(this).addClass("img-selected");
      e.stopPropagation();
    });
    $(document).on("click", function(e) {
      if ($(e.target).is(".newly-added") === false) {
        $(".newly-added").removeClass("img-selected");
      }
    });
  } 
});
.new-multiple {
  width:400px !important;
  height:400px !important;
  background:white;
  border:2px solid red;
  overflow:hidden;
}
  
.img-div {
  width:200px;
  height:200px;
} 

.newly-added {
  width:100%;
  height:100%;
} 

.img-selected{
  box-shadow: 1px 2px 6px 6px rgb(206, 206, 206);
}
<link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>

<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>


<input   name="user_file[]" id="user_file" style="position: relative;overflow: hidden" multiple="" type="file">
<div class="new-multiple"></div>

https://jsfiddle.net/vd11qyzv/7/

这里我必须手动设置图像宽度、div 宽度以进行初始加载

.img-div{
   width:200px;
   height:200px;
 } 
 .newly-added{
    width:100%;
    height:100%;
}  

如果我没有使用这个 CSS,那么调整大小将不起作用。

但我不想这样做。 因为上传的图片会因为这个手动的宽高而被拉伸或放大。原始图像尺寸将丢失。

我们如何解决这个问题?

【问题讨论】:

标签: javascript jquery css jquery-ui jquery-plugins


【解决方案1】:

首先,这里有很多有用的信息:How to get image size (height & width) using JavaScript?

请在发布之前先研究您的问题。

其次,使用我在上一个问题中提供的示例,我们可以使用 JavaScript var img = new Image(); 收集此详细信息,以创建图像对象,而不是在 DOM 或标记中,然后从中获取尺寸加载后。

片段

  var imgDim = {
    width: 0,
    height: 0
  };
  var newImg = new Image();
  $(newImg).attr({
    src: objectUrl,
    id: "img-" + key,
    class: "newly-added"
  }).load(function(e) {
    imgDim.width = this.width;
    imgDim.height = this.height;
    $(newImg).appendTo($newDiv).css({
      width: imgDim.width + "px",
      height: imgDim.height + "px"
    });
  });
  $(newImg).resizable();
  window.URL.revokeObjectURL(val);

工作示例:https://jsfiddle.net/Twisty/vd11qyzv/12/

更新

如果您想调整图像大小并保留比例,您可以使用设置的宽度或高度来执行此操作,并从中计算比例值。例如,如果您想将宽度设置为 200 像素:

Nw = 200
Nh = Ih * (200/Iw)

片段

imgDim.width = 200;
imgDim.height = Math.floor(this.height * (200 / this.width));

如果您的原始尺寸为 1536 x 2048,则结果为 200 x 266。工作示例:https://jsfiddle.net/Twisty/vd11qyzv/15/

【讨论】:

  • 谢谢朋友。但是在你的 js fiddle 中,可拖动功能不起作用。你能检查一下吗
  • .img-div { 显示:内联块; } 解决我的问题
  • @abilasher 可拖动确实有效;然而,它使用手柄。与我在上一篇文章中的评论相同。
  • @abilasher 也许这会帮助你:jsfiddle.net/Twisty/vd11qyzv/19
【解决方案2】:

我对我们的代码做了一些改动,更新js小提琴链接是https://jsfiddle.net/prashantchaurasia/dksqu2hb/6/

css updated of following classes
.new-multiple{
  width:auto;
  height:auto;
  background:white;
  border:2px solid red;
  overflow:hidden;
  display: inline-block;
}
.img-div{

} 
.newly-added{

} 

【讨论】:

  • 谢谢。我检查了这个朋友。但这不是正确的方法,方法也不正确。不要改变主要的html结构
  • 给新小提琴的链接
  • 对不起。这也是错误的。您正在更改主要的 html 和 css 结构
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
相关资源
最近更新 更多