【问题标题】:Passing a variable from Jquery into HTML将变量从 Jquery 传递到 HTML
【发布时间】:2021-12-29 06:02:08
【问题描述】:

我有一个 jquery 函数,可以计算出我通过 umbraco 上传的图像的宽度和高度。如何在页面底部的 html 中将 this.width 和 this.height 调用到我的 img src 中?

 <script>

    function getMeta(varA, varB) {
        if (typeof varB !== 'undefined') {
            alert(varA + ' width ' + varB + ' height');
        } else {
         
            var img = new Image();
            img.src = varA;
            img.onload = function () {
                getMeta(this.width, this.height);

            }
        }
    }
    getMeta("@image.Url()")
</script>

    <img src="@image.Url()" width="" height="" border="0" alt="@Model.Value("mapImage") 
    mapImage" usemap="#Map" />

我将宽度和高度留空,但我希望它等于 this.width 和 this.height。我需要它为我拥有的其他功能自动调用它,因为它需要根据上传的图像的大小进行更改。

提前感谢您的帮助:)

【问题讨论】:

  • 是的,基本上我的这个其他功能需要你声明图像的宽度和高度以便它可以映射它,这就是为什么我必须声明每个图像的高度和宽度哈哈
  • 这是一个多层次的问题,但本质上我想我知道你的意思。首先,您没有在代码中使用 jQuery,但是 Razor(以 @ 开头)和 Umbraco 使用 MVC.NET,所以这就是 Razor。其次,在您的模糊代码中,您只需读取现有图片的宽度和高度,以便稍后在现有图片上进行设​​置。如果我理解你的话,你想获得上传图片的 w/h 并将其应用到你的 DOM 中的现有图片上。但是,这超出了范围,您应该查看如何检测上传的图片尺寸。您只需给我上传图片的路径,我会为您编码
  • 您好,图片已上传至 umbraco 后台。 '@'继承 Umbraco.Web.Mvc.UmbracoViewPage '@'使用 ClientDependency.Core.Mvc @{ var image = Model.Value ("mapImage");这是顶部调用图像的代码

标签: html jquery css


【解决方案1】:

嗯.. 好消息 - 这是 native JS - 没有 jquery 使用了您发布的代码

第二 - 您不需要将 widthheight 发送到您的数据模型 - 只需更新您的 image element。所以……

img.onload = function () {
  const imgElement = document.querySelector('img'); // select the image element in you HTML page
  imgElement.style.width = `${this.width}px`; // set a proper with using pixels as unit
  imgElement.style.height = `${this.height}px`; // set height the same way
}

这应该会更新您的图像比例以完全适合所提供的图像

【讨论】:

  • 非常感谢!我会试一试:)
【解决方案2】:

假设我很了解你并且你有一张上传的图片(你可以通过调用@image.Url() 获取它的来源),并且你想应用另一张图片的尺寸(id 为 templateImg),这是代码:

<img id="templateImg" src="https://cdn.vox-cdn.com/thumbor/prZDWmD_4e4Js7KCRJ2JDrJOqO0=/0x0:939x704/1400x1050/filters:focal(0x0:939x704):format(jpeg)/cdn.vox-cdn.com/uploads/chorus_image/image/49610677/homersimpson.0.0.jpg" />

      <script type = "text/javascript">

         var uploadedPic = 'https://i.pinimg.com/736x/dd/50/38/dd5038cdbfde2a8f1583bd84f992f862.jpg';
    
         function getMeta(src) {
           return new Promise(resolve => {
                 var img = new Image();
                 img.src = src;
                 img.onload = function () {
                    resolve({
                       width: this.width, 
                       height: this.height
                    });
                 }
           })
         }
         getMeta(uploadedPic)
           .then(dimensions => {
              document.getElementById('templateImg').style.width = `${dimensions.width}px`;
              document.getElementById('templateImg').style.height = `${dimensions.height}px`;
           });   
            
      </script> 

这是带有真实图片的工作示例,现在您只需将 var uploadedPic... 行替换为此 Razor 代码:

<text>
var uploadedPic = '@image.Url()';
</text>

(假设这是您上传图片的路径),您会没事的。

【讨论】:

  • 嗨,你在这里是在正确的轨道上!不幸的是,它仍然没有影响图像并且映射仍然错误,因为它说图像上没有声明宽度或高度。如果我手动输入宽度 = 1280 和高度 = 720,则效果很好
  • 但您不应该更改 HTML 中的 templateImg 的 w/h。它是在代码中完成的。它已根据上传图片的 w/h 进行了调整。
  • 在这里,更新你想要的所有图片源,你会看到 Homer 的图像根据你的输入进行拉伸:jsfiddle.net/14j2mL73
  • 是的,当我实际这样做时,它可以完美地工作:)。我认为它出错的原因是因为我如何分配上传的图片 var uploadPic = '@image.Url()';我认为它不会出于某种原因拍摄图像,也许是因为它需要被声明为图像?
  • 我不是 Umbraco 方面的专家,但在 Razor 中,您应该声明图像并为其赋值。您的问题是关于 html/jquery,而 Razor 是 MVC.NET 的表示框架,这完全是另外一回事。谷歌在 razor 中声明变量。我很久以前就使用它,如果我没记错的话,当你在剃须刀页面上使用 javascript 时,你应该写成 &lt;text&gt;...&lt;/text&gt;
猜你喜欢
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 2017-06-12
  • 2017-06-30
相关资源
最近更新 更多