| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
DivineArtS 08.12.2007 00:04 / 08.12.2007 00:05
Ребята - вот возникла такая идея: в тексте како-го либо дива находить все картинки и те, что превышают установленную длину или ширину - уменьшать до определенных размеров и показывать не их огромные оригиналы, а уменьшенные копии. С самим уменьшением понятно - будем делать через внешний хтмл. только вот вышла загвоздка в ЯваСкрипте и тут я застрял. А проблема вот в чем - я запускаю поиск всех тэгов img в div-е - скрипт их находит, но при переборе значений через JsHttpRequest посылается только последний src. Не могу найти причину и решение! помогите с отладкой?<div id="con">
<img src="/templates/trinity/i/video_btn.png" width="101" height="25">
<img src="/templates/trinity/i/video_btn.png" width="102" height="25">
<img src="/templates/trinity/i/video_btn.png" width="103" height="25">
<img src="/templates/trinity/i/video_btn.png" width="104" height="25">
</div>
<script language="JavaScript" src="/js/JsHttpRequest.js"></script>
<script>
if (document.getElementsByTagName) {
var images = document.getElementById('con').getElementsByTagName('img');
for (var i=0;i<images.length;i++) {
var image = images[i];
if (image.getAttribute('src')){
if (image.getAttribute('width')) { var width=image.width^;}
if (image.getAttribute('height')) { var height=image.height^;}
if(width>height){maxSide='width'^;} else {maxSide='height'^;}
var maxSide^;
var curdir;
curdir= image.src^;
var destpath= curdir.substring(0,curdir.lastIndexOf('/')+1)^;
var mainString= destpath
var replaceStr = "\\/"
var delim = "/g"
var regexp = eval("/" + "\\/" + delim)
var newvar=mainString.replace(regexp, replaceStr)
regexp= eval('/\\' + newvar + delim)
var filename=curdir.replace(regexp, "")
var req = new JsHttpRequest()^;
req.onreadystatechange = function() {
if ( req.readyState == 4 ) {
if ( req.responseJS ) {
alert(req.responseJS.dpath)^;
//var sc_req_image = new Image();
image.src = req.responseJS.dpath
image.height=40^;
image.width=30^;
image.onclick=function(){alert('idiots outside')^;}
}
}
}
// disable caching
req.caching = false^;
// prepare object
req.open(null, '/load.html', true)^;
// показывает результат перебора всех значений
document.write('<font color="black">'+destpath+' width='+width+' heght='+height+'<br>'+maxSide+' '+destpath+' '+filename+'</font><br>')^;
// а это посылает последнее и возвращает только последний результат
req.send( { dpath: destpath, side: maxSide, img: curdir, fname: filename } )^;
}}
}
</script>это был код запускающий все это @USE
JSHttpRequest.p
MySqlComp.p
@main[]
$oSql[^MySqlComp::create[$connect_string;$.bDebug(1)]]
^oSql.server{
^rem{ *** decode input data *** }
$hRequest[^JSHttpRequest:decodeRequest[]]
^rem{ *** set vars from decoded data *** }
$sPath[$hRequest.dpath]
$sName[$hRequest.fname]
$sImg[$hRequest.img]
$sMside[$hRequest.side]
^if(def $sPath){^JSHttpRequest:printResponse[;$.dpath[${sPath}_thumb_${sName}]$.fname[$sName]$.img[$sImg]$.side[$sMside]]
}А этот - бэкэнд (я не стал пока заморачиваться - по идее здесь и присутствует уменьшение картинки и ссылка на _thumb_imagename.jpg посылается обратно и уменьшенная картинка загружается с сылкой на chromeless window с оригиналом. а если thumb уже есть - то просто посылается его адрес. но сейчас не суть - это ерунда.) А весь гвоздь в первом куске кода: даже таймер ставил между кругами цикла- не помогало.