【问题标题】:Image-loaded-show function by javascript in mobile browser移动浏览器中的javascript图像加载显示功能
【发布时间】:2012-02-22 23:04:02
【问题描述】:

我正在使用以下javascript代码在移动网络浏览器(支持HTML5)中实现图像加载显示功能。 Image-loaded-show 表示在图片完全加载之前,宽高为0,即不显示,不占空间。

现在的问题是,在加载所有图像之前,图像不会显示。

我需要的是页面中的 iamge 是单独的,一旦加载,图像就会显示出来。

关于如何修改此 javascript 代码的任何提示?谢谢。

               <script type='text/javascript'>

                var srcs = [];
                window.doBindLinks = function() {

                var elems = document.getElementsByTagName('img');
                    for (var i = 0; i < elems.length; i++) {
                        var elem = elems[i];
                        var link = elem.getAttribute('src');
                        elem.setAttribute('link', link);
                        elem.removeAttribute('width');
                        elem.removeAttribute('height');
                        elem.removeAttribute('class');
                        elem.removeAttribute('style');
                        if(link.indexOf('.gif')>0)
                        {
                            elem.parentNode.removeChild(elem);
                        }else{
                        }
                    }
                    var content = document.getElementById('content');
                        var images = content.getElementsByTagName('img');
                        for (var i = 0; i < images.length; i++) {
                            srcs[i] = images[i].src;
                        loadImage(images[i], srcs[i],
                                function (cur, img, cached) {
                                    cur.src = img.src;},
                                function (cur, img) {
                        cur.style.display = 'none';}); 
                        }

                };
                var loadImage = function (cur, url, callback, onerror) {
                            var img = new Image();
                            img.src = url;
                            img.width = '100%';
                        if (img.complete) {
                            callback && callback(cur, img, true);
                          return;
                          }
                        img.onload = function () {
                        callback && callback(cur, img, true);
                        return;
                    };

                    if (typeof onerror == 'function') {
                        img.onerror = function () {
                            onerror && onerror(cur, img);
                        }
                    }
                };
                </script>

页面源代码为:

<body onload="doBindLinks();"><div id="content"> images and text </div></body>

P.S: 因为我需要用 C# 编写这个 javascript 字符串,所以我将 (") 替换为 (')。

编辑: 以下是正确的:

window.doBindLinks = function() {

                var elems = document.getElementsByTagName('img');
                    for (var i = 0; i < elems.length; i++) {
                        var elem = elems[i];
                        var link = elem.getAttribute('src');
                        elem.setAttribute('link', link);
                        elem.removeAttribute('width');
                        elem.removeAttribute('height');
                        elem.removeAttribute('class');
                        elem.removeAttribute('style');
                        elem.setAttribute('display','none');
                        if(link.indexOf('.gif')>0)
                        {
                            elem.parentNode.removeChild(elem);
                        }else{
                        }
                        elem.attachEvent('onload',onImageLoaded);
                    }         
                };
                window.onImageLoaded = function() {
                    var elem = event.srcElement;
                    if ( elem != null ) {
                        elem.setAttribute('display','block');
                    }
                    return false;
                };

另外,css代码是:

img {width: 100%; border-style:none;text-align:center;} 

但图像在全部加载之前仍然不会显示。

【问题讨论】:

    标签: javascript html css image mobile


    【解决方案1】:

    我不是 100% 确定我理解您的问题。您是否试图隐藏图像直到它完全加载?您是将图像写到页面上,还是已经在页面中?这里有几个选项:

    1. 设置样式=“显示:无”。然后添加 onload="this.style.display='';"图像的事件侦听器。 图像将在加载时显示。

    2. 如果您能够更改 c# 代码,则只需将所有图像 url 作为字符串列表写入图像加载函数。然后使用此函数创建图像并将它们添加到内容 div。

    我希望这对你有帮助。如果没有,请提供更多背景信息,我会尽力提供更多帮助。

    好的,我知道你现在要去哪里了。您可以取出您编写的所有 javascript。也许把它打印出来,这样你就可以把它扔进垃圾桶了。然后在这里举我的例子......它会为你解决问题。每个图像仅在加载时显示。显然,如果您想更改任何其他属性,您可以在 showImage 函数中进行。希望这可以帮助。

    <html>
    <head>
    <style>
    img{display:none;}
    </style>
    <script type="text/javascript">
      function showImage(elem) {
        elem.style.display = 'block';
      }
    </script>
    </head>
    <body><div id="content">
      <img src="http://t0.gstatic.com/images?q=tbn:ANd9GcTlpi72nRCVE5cOz3AImtbb7GEbEYRVLkLJxAZsT5Z4XKicteDo" onload="showImage(this)" />
      <img src="http://t0.gstatic.com/images?q=tbn:ANd9GcTlpi72nRCVE5cOz3AImtbb7GEbEYRVLkLJxAZsT5Z4XKicteDo" onload="showImage(this)" />
      <img src="http://t0.gstatic.com/images?q=tbn:ANd9GcTlpi72nRCVE5cOz3AImtbb7GEbEYRVLkLJxAZsT5Z4XKicteDo" onload="showImage(this)" />
      <img src="http://t0.gstatic.com/images?q=tbn:ANd9GcTlpi72nRCVE5cOz3AImtbb7GEbEYRVLkLJxAZsT5Z4XKicteDo" onload="showImage(this)" />
      <img src="http://t0.gstatic.com/images?q=tbn:ANd9GcTlpi72nRCVE5cOz3AImtbb7GEbEYRVLkLJxAZsT5Z4XKicteDo" onload="showImage(this)" />
      <img src="http://t0.gstatic.com/images?q=tbn:ANd9GcTlpi72nRCVE5cOz3AImtbb7GEbEYRVLkLJxAZsT5Z4XKicteDo" onload="showImage(this)" />
      </dvi>
    </body>
    </html>
    

    【讨论】:

    • 是的,我正在尝试隐藏图像,直到它完全加载。我感谢第一个选项将满足我的需要。但我不熟悉 javascript(我是 C# 开发人员>_
    • 像这样插入你的图片标签:
    • 很好,@Stumpy7,我已经编辑了这个问题。你能告诉我代码是否正确吗?
    • 修改css代码为:img {width: 100%;边框样式:无;文本对齐:居中; display:none;} 那么你不必在javascript中将图像设置为display:none。然后更改这一行: elem.setAttribute('display','block');到 elem.setAttribute('style','display:block');只要您在图像上没有其他样式。或者,您可以使用 elem.style.display = 'none';抱歉,我不知道如何在 cmets 区域添加换行符。
    • 似乎“elem.attactEvent('onload',onImageLoaded)”,onload事件没有触发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2023-03-26
    • 2016-02-19
    相关资源
    最近更新 更多