Q
動態圖像標記
0
A
回答
2
我會用這樣的劇本去:
<script type="text/javascript">
var arrPossibleImageFolders = ["folder1", "folder2", "folder3"];
var strDefaultImage = "nopicture.gif";
function TryDifferentFolder(oImage) {
var folderIndex = parseInt(oImage.getAttribute("folder_index"), 10);
if (isNaN(folderIndex))
folderIndex = 0;
folderIndex++;
if (folderIndex >= arrPossibleImageFolders.length) {
oImage.src = strDefaultImage;
return;
}
var lastSlashIndex = oImage.src.lastIndexOf("/");
var strNewSource = arrPossibleImageFolders[folderIndex] + "/" + oImage.src.substr(lastSlashIndex);
oImage.src = strNewSource;
oImage.setAttribute("folder_index", folderIndex + "");
}
</script>
然後有這樣的圖像標籤觸發代碼:
<img src="folder1/mypicture.gif" onerror="TryDifferentFolder(this);" />
這將folder1
首先爲「mypicture.gif」搜索,那麼如果沒有找到(onerror觸發)將嘗試在folder2等,最後加載默認圖片。
-1
大聲笑,這不能做只有一些標籤,你應該propably使js(jquery/ajax)函數來搜索該文件,然後更新img的href屬性...或者你應該解釋你的打算多一點
1
真的,你應該在服務器端做這樣的事情,文件實際在哪裏;製作一個腳本,查找圖像併發送它找到的內容。
(編輯刪除我原來的JS解決方案,因爲它是壞的,和其他人提出更好的。)
2
var img = new Image();
img.onload = function(){ alert("I am loaded"); };
img.onerror = function(){ alert("I am not loaded"); };
img.src = "/foo/bar.gif";
如果你得到的onerror,嘗試在你的列表中再次設置源到下一個圖像。
0
聽起來像你可能需要使用一堆onerror處理程序。嘗試加載一些圖片,抓住可能的錯誤,直到你用完了候選人。加載佔位符作爲最後的圖像。
0
我會用Ajax解決它,嘗試加載每個圖像,如果你得到一個200意味着圖像存在,如果404嘗試下一個圖像。
var images = ['/images/1.jpg', '/images/2.jpg', '/images/3.jpg'];
var imageExists = false;
for(var i = 0; i < images.length; i++){
if(!imageExists){
$.ajax({
url: images[i],
async: false,
success: function(){
// use images[i] as your image
imageExists = true;
}
});
}
}
if(!imageExists) {
// use default image
}
0
既然你問有關如何使用標記做,我會告訴一個解決方案,但我從來沒有做我自己:
<script>
urlsToTry = ['http://url2.com','http://url3.com','http://you.get.the.picture.com','http://www.google.com/images/logos/ps_logo2.png'];
</script>
<img src="http://url1.com" style="display: none;" onload="this.style.display='block';" onerror="if(urlsToTry.length) { this.src = urlsToTry.shift(); } else { alert('none of the urls worked!'); }">
你可以在這裏看到它的一個例子:http://jsfiddle.net/LLQLH/1/
這種方法的缺點之一是,它試圖連續加載圖片,如果它們都失敗,可能會導致相當長的等待時間。使用合適的JS並行的辦法是去海事組織方式:
<script>
var loadQueue={};
var urlsToTry = ['http://url1.com','http://url2.com','http://url3.com','http://you.get.the.picture.com'];
function showTag(url) {
var tag = document.getElementById('myimage');
if(url) tag.src = url;
tag.style.display='inline-block';
}
function onLoadEventHandler(url) {
return function() {
delete loadQueue[url];
for(var i = 0, img; img = loadQueue[i]; i++) {
img.onload = null;
}
loadQueue = null;
showTag(this.src);
}
}
function onErrorEventHandler(url) {
return function() {
delete loadQueue[url];
for(var i in loadQueue) return;
showTag(); //we will only get here if loadQueue is empty
}
}
for(var i = 0, url; url = urlsToTry[i]; i++) {
loadQueue[url] = new Image();
loadQueue[url].onload = onLoadEventHandler;
loadQueue[url].onerror = onErrorEventHandler(url);
loadQueue[url].src = url;
}
</script>
<img id="myimage" src="http://www.google.com/images/logos/ps_logo2.png" style="display: none;">
你可以看到它在這裏工作:http://jsfiddle.net/DJ2SH/
相關問題
- 1. 動態圖像Facebook的Opengraph og:圖像元標記
- 2. 綁定onError與動態創建的圖像標記在jquery
- 3. 添加動態標記到地圖
- 4. 向Google地圖動態添加標記
- 5. Android - 動態自定義地圖標記
- 6. jQuery動態更改圖像標題
- 7. 如何動態更改Google地圖標記圖標
- 8. 谷歌地圖上的動態標記圖標
- 9. 網頁動態創建Google地圖標記圖標
- 10. 動態改變融合表谷歌地圖的標記圖標?
- 11. 當在地圖活動上放置標記時,攝像機移動到標記
- 12. 動態讀取元標記
- 13. 動態更改HTML標記
- 14. 形狀的動態標記
- 15. Wicket中的動態標記
- 16. 動態標記與MVC
- 17. 動態創建錨標記
- 18. Geoserver和動態標記
- 19. 動態PHP圖像
- 20. logo圖像動態
- 21. 動態圖像源?
- 22. IMG標記不帶圖像
- 23. Angular 4圖像標記
- 24. MKMapView上的圖像標記
- 25. datalist標記中的圖像
- 26. XMP圖像標記和Python
- 27. 損壞的圖像標記
- 28. 圖像的雙標記
- 29. li標記圖像定製
- 30. 圖像上的標記點
這是jQuery的BTW – egze 2011-02-02 15:40:33