【问题标题】:Pulling a random image from imgur with Javascript使用 Javascript 从 imgur 中提取随机图像
【发布时间】:2015-12-11 03:48:15
【问题描述】:

我在其他一些 StackOverflow 答案的帮助下创建了一个函数 - 单击按钮时,它会使用 5 个字母的字符串从 imgur 生成一个随机图像并将其添加到 url。这是我的代码:http://codepen.io/kaisle/pen/ojbwQm

function randomString() {
    var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz';
    var stringlength = 5;
    var text = '';
    for (var i = 0; i < stringlength; i++) {
      var rnum = Math.floor(Math.random() * chars.length);
      text += chars.substring(rnum,rnum+1);
    }
    document.getElementById('output').innerHTML = text;
    var source = 'http://i.imgur.com/' + text + '.jpg';
    $('.stuff img').attr('src', source);
    var newimagewidth = $('.stuff img').width;
    avoidBrokenImages();
  }

这很成功,因为我得到了很多“已删除”的图像,因为它从 imgur 中提取已删除的图片,或者从未包含随机 5 字母字符串的图像。为了避免这种情况,我试图创建一种方法来检测这个 161px 宽的图像 (http://i.imgur.com/removed.png),然后重新运行该函数,直到它得到一个不是 161px 宽的图像。我在上面的 Codepen 中尝试了这个,方法是在我的图像生成器函数的末尾运行以下函数:

function avoidBrokenImages(){
  var newimagewidth = $('.stuff img').width;
  if ($('.stuff img').width() == 161) {
     randomString();
    } else {
      return false;
    }
}

这个“avoidBrokenImages”功能似乎不起作用,因为我仍然经常收到“已删除”的图像。

有什么建议吗?我觉得这很容易我想念。

【问题讨论】:

  • 函数返回false,好的,但是你期望发生什么,因为该函数返回false?
  • 缺少一些字符:var newimagewidth = $('.stuff img').width()。改变它,你就不必在条件语句中重复它。剩下的我会选择给出的答案。

标签: javascript jquery random


【解决方案1】:

您正在尝试在加载之前读取图像宽度。你应该改变

$('.stuff img').attr('src', source);
var newimagewidth = $('.stuff img').width;
avoidBrokenImages();

$('.stuff img').attr('src', source).on('load', avoidBrokenImages);

修改原文:http://codepen.io/anon/pen/qObPrq

稍微清理一下代码:http://codepen.io/anon/pen/KdVXWY

【讨论】:

  • 出于此目的使用 load() 而不使用 on() 已被弃用一段时间。可能会更好$('.stuff img').attr('src', source).on('load', avoidBrokenImages);
  • 感谢 arcyqwerty 的回答。还有 Shikkediel,谢谢,使用 on() 效果更好,它似乎可以更快地绕过 161px 图像。你们能想出一种根本不显示 161px 图像的方法,也许在更新源之前以某种方式检查宽度?
  • 是的,如果您使用 JavaScript 的 Image 对象而不是使用 DOM 对象。您也可以先将其加载到不可见的 DOM 对象中,然后在找到匹配项时将其交换。
  • 更新了codepen.io/anon/pen/KdVXWY 以使用Image 对象。请注意,如果您希望在找到图像之前不更新文本,请将更新语句移动到替换图像的 else 块。 :)
  • @Shikkediel:感谢您的提示。自从我做前端工作以来已经有一段时间了。答案已更新为使用 on() 作为原始代码。
猜你喜欢
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 2016-05-01
  • 2021-11-03
  • 2021-04-15
  • 2015-12-13
  • 2017-04-05
  • 2016-07-17
相关资源
最近更新 更多