Javascript-форум (https://javascript.ru/forum/)
-   Учебные материалы (https://javascript.ru/forum/study/)
-   -   Удаление лишних объектов (https://javascript.ru/forum/study/69688-udalenie-lishnikh-obektov.html)

DjFuntik 12.07.2017 11:26

Удаление лишних объектов
 
Народ поможите пожалуйста. На профи ни капли не придендую, делаю одну штучку себе именно для IE (не пинайте за него), она работает, НО, как всегда есть своё НО.

В шапке пишу такой код (кратко суть - при наведении на картинку рисует её увеличенное изображение)
ToolTip.offsetX = - (10 + IMG_size + 10)
ToolTip.offsetY = 17

function ToolTip(obj, text)
{
 if (!obj || obj.nodeType != 1) { throw "Illigal argument exception" }
 var tip = document.createElement("DIV")
 tip.className = 'tool_tip'
 tip.innerHTML = "<CENTER>Моё окно</CENTER>"
 tip.style.top = 10
 tip.style.left = 10
 document.body.appendChild(tip)

 obj.onmouseout = function (ev)
  { tip.style.visibility = 'hidden' }
 obj.onmousemove = function(ev)
  {
   tip.style.visibility = 'visible'
   if (window.event) ev = window.event
   if(ev.clientX+20+tip.offsetWidth+18 > document.body.clientWidth) { ToolTip.offsetX =- tip.offsetWidth - 20 } else { ToolTip.offsetX = 20 }
   if(ev.clientY+10+tip.offsetHeight+0 > document.body.clientHeight) { ToolTip.offsetY =- tip.offsetHeight - 10 } else { ToolTip.offsetY = 10 }
   tip.style.left = ev.clientX + document.body.scrollLeft + ToolTip.offsetX
   tip.style.top = ev.clientY + document.body.scrollTop + ToolTip.offsetY 
  }
}

function initToolTips()
{
  // предположительно тут надо как-то удалять старые объекты, прежде чем создавать новые

 var tags, tooltext
 for(var i = 0; i < arguments.length; i++)
  {
   tags = document.body.getElementsByTagName(arguments[i])
   for (var j = 0; j < tags.length; j++)
    if ((tooltext=tags[j].getAttribute('tooltip'))) { ToolTip(tags[j], tooltext) }
  }
}


В теле страницы скриптом вписываю картинку(и)
sss.innerHTML("<IMG tooltip='" + screens + "' src='" + screens + ".jpg'>")
....
initToolTips("img") // для инициализации всплывающих окошек

Ну и вот это самое тело формируется динамически по клику повторно переписывается через innerHTML с последующей инициализацией. Зачем так реализовано это не обсуждается, т.к. этот пример очень сильно обрезан для демонстрации только основного кода. А теперь суть самой проблемы!!!
При первой инициализации в теле страницы (если смотреть отладчиком) появляется DIV, ну как бы всё хорошо,так и должно быть. При повторной инициализации в теле страницы уже два DIV`а, ну и так далее по нарастающей. Т.к. истестна я гружу не только одну картинку, а большой объём контента, то страница разрастается очень сильно (видно только в отладчике, внешне всё замечательно) и сжирает кучу ресурсов. Потому предполагаю, что при инициализации надо как-то убирать ранее добавленные объекты!
Не силён вообще я пока что в этом, я только учусь, поможите

рони 12.07.2017 16:48

DjFuntik,
if ((tooltext=tags[j].getAttribute('tooltip')) && tags[j].className != "ready") {tags[j].className = "ready"; ToolTip(tags[j], tooltext) }

DjFuntik 13.07.2017 12:26

Спасибо, я конечно подправил, но результат не тот что требуется.
Предложенный вариант, как я понимаю, вносит изменения в код формирования объектов, т.е. ЕСЛИ ОНИ ЕСТЬ, ТО НЕ СОЗДАВАТЬ НОВЫЕ ПОДОБНЫЕ.
Мне же нужно что-то типа .removeChild, чтобы ранее добавленное через appendChild() удалять, перед тем как новые добавлять на страницу.
Чувствую, надо поподробнее описать сам код.

<HTML>
<HEAD>
<SCRIPT language=JavaScript>

ToolTip.offsetX = - (10 + IMG_size + 10)
ToolTip.offsetY = 17

function ToolTip(obj, text)
 { ... см.пост №1 ... }

function initToolTips()
{
 var tags, tooltext
 for(var i = 0; i < arguments.length; i++)
  {
   tags = document.body.getElementsByTagName(arguments[i])
   for (var j = 0; j < tags.length; j++)
    if ((tooltext = tags[j].getAttribute('tooltip')) && tags[j].className != "ready")
     { tags[j].className = "ready"; ToolTip(tags[j], tooltext) }
   }
}

function proc(n)
{
 //тут естестно не одна картинка, а довольно большая страница формирующаяся динамически
  text = "<IMG tooltip='" + screens + "' src='screens"+n + ".jpg'>"
  sss.innerHTML = text
  initToolTips("img") // для инициализации всплывающих окошек на обновлённом содержимом страницы
}
</SCRIPT>
</HEAD>

<BODY>
<IMG scr="screens1" onCklick=proc(1)>
<IMG scr="screens2" onCklick=proc(2)>
<IMG scr="screens3" onCklick=proc(3)>
<DIV id='sss'></DIV>
<SCRIPT language=JavaScript>proc(1)<SCRIPT> <!-- чтоб сразу п1 выполнился-->
</BODY>
</HTML>

DjFuntik 13.07.2017 12:30

В общем, т.к. sss довольно громоздкое, то через десяток кликов в это самое sss перестают подгружаться картинки из-за того что их просто много, собственно из-за этого таким образом и разбил станицу на части чтобы можно было подгружать остальное содержимое (именно подгружать, а не загружать через новые страницы), хотелось в одной странице менять содержимое

рони 19.07.2017 15:57

DjFuntik,
if(document.getElementById('tool_tip') && document.getElementById('tool_tip').parentNode) {document.getElementById('content').removeChild(document.getElementById('tool_tip'))}

DjFuntik 20.07.2017 07:52

Спасибо, но дело в том что, подобная конструкция не сильно помогла, вродь и делает то что нужно, но вот эффект не тот. При таком варианте всплывающие окна работают, но и дивы в отладчике плодятся. А если оставить этот код без условия, то дивы перестают плодиться.... но и всплывающих окон нет, собственно, вероятно из-за этого они и не плодятся, потому что удалены все полностью, или просто не проинициализировались и не добавились....... видимо придётся полностью код выкладывать чтоб на нём можно было бы подправить (а он большой, придётся упрощать)

DjFuntik 20.07.2017 08:42

Привожу сильно порезанный код (только самое необходимое). Можно его воткнуть в файлик HTML и открыть браузером. Предназначен только для IE8 !! (без вариантов, только так).
При такой реализации если смотреть через отладчик, то после вызова proc(n) в сам документ добавляется несколько узлов DIV, при последующем вызове proc(n+1) добавляется ещё несколько узлов DIV и так каждый раз. В результате страница разрастается, отображается только то что требуется, а в отладчике присутствуют ВСЕ добавленные узлы. Хотелось бы чтоб при очередном вызове proc() не просто создавались новые узлы, а предварительно удалялись старые узлы!
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<STYLE>
IMG {border-width:0px; margin: 3px; align: center}
.tool_tip {	border-right: 1px solid; border-top: 1px solid; visibility: hidden; font: 900 15px tahoma; border-left: 2px solid; border-bottom: 2px solid; letter-spacing: 2px; position: absolute}
</STYLE>
<SCRIPT language=JavaScript>
ToolTip.offsetX = - (10 + 400 + 10)
ToolTip.offsetY = 17

function ToolTip(obj, text)
{
 if (!obj || obj.nodeType != 1) { throw "Illigal argument exception" }
 var tip = document.createElement("DIV")
 tip.className = 'tool_tip'
 tip.innerHTML = "<CENTER><FONT size=+3>"+text+"</FONT><BR><IMG height=400 width=400 src='"+text+".jpg'><IMG height=400 width=400 src='"+text+".jpg'></CENTER>"
 tip.style.top = 10
 tip.style.left = 10
 document.body.appendChild(tip)
 obj.onmouseout = function (ev)
  { tip.style.visibility = 'hidden' }
 obj.onmousemove = function(ev)
  {
   tip.style.visibility = 'visible'
   if (window.event) ev = window.event
   if (ev.clientX+20+tip.offsetWidth+18 > document.body.clientWidth) { ToolTip.offsetX =- tip.offsetWidth-20 } else { ToolTip.offsetX = 20 }
   if (ev.clientY+10+tip.offsetHeight+0 > document.body.clientHeight) { ToolTip.offsetY =- tip.offsetHeight-10 } else { ToolTip.offsetY = 10 }
   tip.style.left = ev.clientX + document.body.scrollLeft + ToolTip.offsetX
   tip.style.top = ev.clientY + document.body.scrollTop + ToolTip.offsetY
  }
}

function initToolTips()
{
//if(document.getElementById('tool_tip') && document.getElementById('tool_tip').parentNode) { document.getElementById('content').removeChild(document.getElementById('tool_tip')) }
 var tags, tooltext
 for(var i = 0; i < arguments.length; i++)
  {
   tags = document.body.getElementsByTagName(arguments[i])
   for (var j = 0; j < tags.length; j++)
    if ((tooltext = tags[j].getAttribute('tooltip')) && tags[j].className != "ready") { tags[j].className = "ready"; ToolTip(tags[j], tooltext) }
  }
}

var colon = new Array()
function proc(js)
{
 switch (js)
  {
   case "62": colon = ["66","А","Б","В","Г","Д"]; break
   case "96": colon = ["98","Д","Б","В","Г","А"]; break
   case "01": colon = ["04","А","Г","В","Б","Д"]; break
  }
 os = ""
 for (var i = 1; i < colon.length; i++) { os += "<IMG tooltip='" + colon[i] + "' src='" + colon[i] + ".jpg'>" }
 ts.innerHTML = "<DIV id='content'>" + os + "</DIV>"
 initToolTips("img")
}
</SCRIPT>
</HEAD>

<BODY>
<IMG src='screens1.jpg' onClick=proc('62')> <IMG src='screens2.jpg' onClick=proc('96')> <IMG src='screens3.jpg' onClick=proc('01')>
<DIV id='ts'>Область загрузки<DIV><SCRIPT language=JavaScript>proc('62')</SCRIPT>
</BODY>
</HTML>

рони 20.07.2017 10:50

DjFuntik,
<!DOCTYPE html>

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <style>
  IMG{
    border-width:0px;
    margin:3px;
    align:center;
  }

  .tool_tip{
    border-right:1px solid;
    border-top:1px solid;
    visibility:hidden;
    font:900 15px tahoma;
    border-left:2px solid;
    border-bottom:2px solid;
    letter-spacing:2px;
    position:absolute;
  }
  </style>
  <script>

ToolTip.offsetX = -(10 + 400 + 10);
ToolTip.offsetY = 17;

var arrT = [], arrImg = [];

function ToolTip(obj, text) {
    if (!obj || obj.nodeType != 1) throw "Illigal argument exception";
    var tip = document.createElement("DIV");
    arrT.push(tip);
    tip.className = "tool_tip";
    tip.innerHTML = "<CENTER><FONT size=+3>" + text + "</FONT><BR><IMG height=400 width=400 src='" + text + ".jpg'><IMG height=400 width=400 src='" + text + ".jpg'></CENTER>";
    tip.style.top = 10;
    tip.style.left = 10;
    document.body.appendChild(tip);
    obj.onmouseout = function(ev) {
        tip.style.visibility = "hidden"
    };
    obj.onmousemove = function(ev) {
        tip.style.visibility = "visible";
        if (window.event) ev = window.event;
        if (ev.clientX + 20 + tip.offsetWidth + 18 > document.body.clientWidth) ToolTip.offsetX = -tip.offsetWidth - 20;
        else ToolTip.offsetX = 20;
        if (ev.clientY + 10 + tip.offsetHeight + 0 > document.body.clientHeight) ToolTip.offsetY = -tip.offsetHeight - 10;
        else ToolTip.offsetY = 10;
        tip.style.left = ev.clientX + document.body.scrollLeft + ToolTip.offsetX;
        tip.style.top = ev.clientY + document.body.scrollTop + ToolTip.offsetY
    }
}
var colon = new Array;

function proc(js) {
    for (var i = 0; i < arrT.length; i++) {
        arrT[i].parentNode.removeChild(arrT[i]);
        arrImg[i].parentNode.removeChild(arrImg[i])
    }
    arrT = [], arrImg = [];
    switch (js) {
        case "62":
            colon = ["66","А","Б","В","Г","Д"];
            break;
        case "96":
            colon = ["98","Д","Б","В","Г","А"];
            break;
        case "01":
            colon = ["04","А","Г","В","Б","Д"];
            break
    }
    
    for (var i = 1; i < colon.length; i++) {
        var img = document.createElement("img");
        arrImg.push(img);
        img.src = colon[i];
        ts.appendChild(img);
        ToolTip(img, colon[i])
    }
};
  </script>

  <title></title>
</head>

<body>
  <img src='screens1.jpg' onclick="proc('62')">
  <img src='screens2.jpg' onclick="proc('96')">
  <img src='screens3.jpg' onclick="proc('01')">

  <div id='ts'></div><script>proc('62')</script>
</body>
</html>

DjFuntik 20.07.2017 11:29

Интересно! Эффект кажется достигнут!! Буду проверять, разбираться и пытаться встроить в моё "детище", посмотрим приживётся ли оно.
Спасибо большое за помощь.

DjFuntik 24.07.2017 13:55

Очень понравилась ваша реализация, но примостить к моему детищу так и не получилось, может направите на путь истинный?

На самом деле в функции proc(js) вместо SWITCH(js) прописана процедура RunJava, а в файле загружаемом этой функцией прописан не массив, а функция с этим самым массивом вместо аргумента, т.е. вот так stroka (["66","А","Б","В","Г","Д"]) (опять же строк таких много и массив сам по себе тоже большой, и аргументы только для упрощения указал как буквы односимвольные)
function proc(js) {
    for (var i = 0; i < arrT.length; i++) {
        arrT[i].parentNode.removeChild(arrT[i]);
        arrImg[i].parentNode.removeChild(arrImg[i])
    }
    arrT = [], arrImg = [];
    os = ""
    [B]RunJava(resurs)[/B]
[I]//    switch (js) {
//        case "62": colon = ["66","А","Б","В","Г","Д"]; break;
//        case "96": colon = ["98","Д","Б","В","Г","А"]; break;
//        case "01": colon = ["04","А","Г","В","Б","Д"]; break
//    }[/I]

    for (var i = 1; i < colon.length; i++)
     {
        var img = document.createElement("img");
        arrImg.push(img);
        img.src = colon[i]+".jpg";
        ts.appendChild(img);
        ToolTip(img, colon[i])
    }
  ts.innerHTML = os
}

function RunJava(resurs)
{
 var b = fso.FileExists(resurs)
 if (b) { eval(fso.OpenTextFile(resurs, 1, 0).ReadAll()) }
}

function stroka(colon)
{
// тут формируется строка таблицы с картинками из массива colon. (опять же не все элементы массива содержат картинку)
os += "содержимое"
}


файл resurs.js
stroka ([["66","#"],["+","А1"],["+","Б1"],["-","В8"],["-","Г4"],["+","Д5"]])
stroka ([["67","#"],["+","А2"],["-","Б3"],["+","В7"],["+","Г9"],["-","Д1"]])
stroka ([["68","#"],["+","А3"],["+","Б5"],["-","В1"],["+","Г2"],["+","Д8"]])

вот как раз те которые "-" они без картинок.
пытался в процедуру stroka() добавить после каждого добавляемого IMG дописать
var img = document.createElement("img");
arrImg.push(img);
img.src = mmm+".jpg";
ts.appendChild(img);
ToolTip(img, mmm)
но чёт это из области фантазёрства мне так кажется...

рони 24.07.2017 14:35

DjFuntik,
не могу помочь, не понимаю что вы хотите сделать.

DjFuntik 26.07.2017 10:52

Хочу примерно тоже самое что и в вашем варианте, но только у меня оно должно подгружаться из файлов js (находятся в том же каталоге что и сама страничка).
За код не пинайте, я тока учусь...
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<STYLE>
IMG {border-width:0px; margin: 3px; align: center}
.tool_tip {	border-right: #9191a2 1px solid; padding-right: 12px; border-top: #9191a2 1px solid; padding-left: 12px; visibility: hidden; padding-bottom: 12px; font: 900 15px tahoma; border-left: #9191a2 2px solid; color: #9191f2; padding-top: 12px; border-bottom: #9191a2 2px solid; letter-spacing: 2px; position: absolute; background-color: #aafaff}
</STYLE>

<SCRIPT language=JavaScript>
ToolTip.offsetX = - (10 + 400 + 10)
ToolTip.offsetY = 17

var arrT = [], arrImg = []
 
function ToolTip(obj, text)
{
 if (!obj || obj.nodeType != 1) { throw "Illigal argument exception" }
 var tip = document.createElement("DIV")
 arrT.push(tip)
 tip.className = "tool_tip"
 tip.innerHTML = "<CENTER><FONT size=+3>"+text+"</FONT><BR><IMG height=400 width=400 src='"+text+".jpg'><IMG height=400 width=400 src='"+text+".jpg'></CENTER>"
 tip.style.top = 10
 tip.style.left = 10
 document.body.appendChild(tip)
 obj.onmouseout = function(ev)
  { tip.style.visibility = "hidden" }
 obj.onmousemove = function(ev)
  {
   tip.style.visibility = "visible"
   if (window.event) { ev = window.event }
   if (ev.clientX+20+tip.offsetWidth+18 > document.body.clientWidth) { ToolTip.offsetX =- tip.offsetWidth - 20 } else { ToolTip.offsetX = 20 }
   if (ev.clientY+10+tip.offsetHeight+0 > document.body.clientHeight) { ToolTip.offsetY =- tip.offsetHeight - 10 } else { ToolTip.offsetY = 10 }
   tip.style.left = ev.clientX + document.body.scrollLeft + ToolTip.offsetX
   tip.style.top = ev.clientY + document.body.scrollTop + ToolTip.offsetY
  }
}

function RunJava(resurs)
{
 var fso = new ActiveXObject("Scripting.FileSystemObject")
 var b = fso.FileExists(resurs)
 if (b) { eval(fso.OpenTextFile(resurs, 1, 0).ReadAll()) }
}

var colon = new Array()
function stroka(colon)
{
 os += "<TABLE><TR>"
 for (var i = 1; i < colon.length; i++)
  {
   os += "<TD><P>....<IMG tooltip='" + colon[i][1] + "' src='" + colon[i][1]+ ((colon[i][0]=="+")?"":"-") + ".jpg'>...</TD>"
   var img = document.createElement("img")
   arrImg.push(img)
   img.src = colon[i][1]+".jpg"
   ts.appendChild(img)
   ToolTip(img, colon[i][1])
  }
 os+="</TR></TABLE>"
}

function proc(js)
{
 for (var i = 0; i < arrT.length; i++)
  {
   arrT[i].parentNode.removeChild(arrT[i])
   arrImg[i].parentNode.removeChild(arrImg[i])
  }
 arrT = [], arrImg = []
 os = ""
 p = location.href
 p = p.replace("file:///","")
 p = p.replace(/%20/g," ")
 p = p.replace(/\//g,"\\")
 t = p.split('\\')
 RunJava(p.substring(0,p.length - t[t.length - 1].length) + "resurs" + js + ".js")
 ts.innerHTML = os
}
</script>
</head>

<body>
 <script>
  var pp = new Array()
  pp = ["62","96","01"]
  for (var i = 0; i < pp.length; i++)
   document.write("<img src='screens"+(i+1)+".jpg' onclick=proc('"+pp[i]+"')>")
 </script>
 <div id='ts'></div><script>proc('62')</script>
</body>
</html>


resurs01.js
stroka ([["66","#"],["+","А1"],["+","Б1"],["-","В8"],["-","Г4"],["+","Д5"]])
stroka ([["67","#"],["+","А2"],["-","Б3"],["+","В7"],["+","Г9"],["-","Д1"]])
stroka ([["68","#"],["+","А3"],["+","Б5"],["-","В1"],["+","Г2"],["+","Д8"]])

resurs62.js
stroka ([["68","#"],["+","А3"],["+","Б5"],["-","В1"],["+","Г2"],["+","Д8"]])
stroka ([["67","#"],["+","А2"],["-","Б3"],["+","В7"],["+","Г9"],["-","Д1"]])
stroka ([["66","#"],["+","А1"],["+","Б1"],["-","В8"],["-","Г4"],["+","Д5"]])

resurs96.js
stroka ([["66","#"],["+","А1"],["+","Б1"],["-","В8"],["-","Г4"],["+","Д5"]])
stroka ([["68","#"],["+","А3"],["+","Б5"],["-","В1"],["+","Г2"],["+","Д8"]])
stroka ([["67","#"],["+","А2"],["-","Б3"],["+","В7"],["+","Г9"],["-","Д1"]])

рони 26.07.2017 12:32

DjFuntik,
не осилить мне ваш код.

DjFuntik 26.07.2017 15:03

Меня интересуют строки 52-56 и 63-68. Строки 63-67 я так полагаю на своём месте, строка 68 не знаю там ли должна остаться? Строки 52-56 это ваш код, просто не знаю как его подвязать к "IMG tooltip"

DjFuntik 26.07.2017 15:53

Ну или если так не получается понять мой замысел, то тогда подскажите, пожалуйста, как из страницы удалить все "<DIV class='tool_tip'>" вместе с содержимым?

рони 26.07.2017 17:35

Цитата:

Сообщение от DjFuntik
удалить все "<DIV class='tool_tip'>" вместе с содержимым?

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>


</head>

<body>
<div class="tool_tip">1</div>
<div class="tool_tip">2</div>
<div class="tool_tip">3</div>
<div class="test">4</div>
<div class="test">5</div>
<div class="tool_tip">6</div>
<div class="tool_tip">7</div>
<div class="tool_tip">8</div>
 <script>
   var div = document.getElementsByTagName('div'), l = div.length, d;
   for (; d = div[--l];)  { if(d.className == 'tool_tip') d.parentNode.removeChild(d)}
 </script>
</body>
</html>

DjFuntik 27.07.2017 07:17

Вот теперь просто наиогромнейшее СПАСИБО!
В отладчике на странице только те объекты, которые присутствуют в текущий момент, остальной исторически накопленный мусор удалён!!!

P.S. уж в дагонку может и вторую (последнюю в моём детище) проблемку поможете решить?
Есть DIV надо его отобразить, загрузить данные, и после окончания загрузки скрыть - ну обычный значёк "LOADING"
<BODY>
<DIV id='waitDiv' style='z-index:1; left: 47%; visibility: visible; position: absolute; top: 50%; text-align: center; background-color=yellow; border-style=groove'><FONT color=red><B><BIG>Идёт загрузка...</BIG></B><BR><IMG src='loading.gif'><BR>Пожалуйста, подождите.</FONT></DIV>
<SCRIPT>
 document.all["waitDiv"].style.visibility = 'visible'
// или document.getElementById('waitDiv').style.display='block'
 RunJava("resurs.js") // может грузиться и отрабатывать аж до 8-10 секунд
 document.all["waitDiv"].style.visibility = 'hidden'
// или document.getElementById('waitDiv').style.display='none'
</SCRIPT>
</BODY>

Проблема в том что значёк не отображается. Если после RunJava поставить alert() или поставить кривой код для заглючивания, то за сообщением будет видно что значёк отображается, если же сбоев и остановок не было, то значёк даже на миллисекунду не отображается. По моей логике не вижу в чём проблема "не отображения". Обыскал кучу интернета, вариантов подходящих для IE без дополнительных библиотек и при том что рабочих не нашёл! Может и тут направите?

рони 27.07.2017 07:42

DjFuntik,
может обернуть в
window.onload = function() {
// ваш код
}

чтоб картинка успела загрузится

DjFuntik 27.07.2017 09:50

На сколько я представляю onload к странице будет относиться, а она уже будет загружена, и в ней будет меняться содержимое "DIV ts", т.е. onload не будет срабатывать... или я не прав?
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<SCRIPT language=JavaScript>
function RunJava(resurs)
{
 var fso = new ActiveXObject("Scripting.FileSystemObject")
 var b = fso.FileExists(resurs)
 if (b) { eval(fso.OpenTextFile(resurs, 1, 0).ReadAll()) }
}
 
var colon = new Array()
function stroka(colon)
{
 os += "<TABLE><TR>"
 for (var i = 1; i < colon.length; i++)
  os += "<TD><P>....<IMG src='" + colon[i][1]+ ((colon[i][0]=="+")?"":"-") + ".jpg'>...</TD>"
 os+="</TR></TABLE>"
}
 
function proc(js)
{
 document.all["waitDiv"].style.visibility = 'visible' // или document.getElementById('waitDiv').style.display='block'
 os = ""
 // может грузиться и отрабатывать аж до 8-10 секунд, в загружаемом файле вызов процедуры stroka ([["66","#"],["+","А1"],["+","Б1"],["-","В8"],["-","Г4"],["+","Д5"]]) которая наращивает переменную 'os'
 RunJava("resurs" + js + ".js")
 document.all["waitDiv"].style.visibility = 'hidden' // или document.getElementById('waitDiv').style.display='none'
 ts.innerHTML = os
}
</script>
</head>

<body>
 <img src='screens1.jpg' onclick=proc('62')>
 <img src='screens2.jpg' onclick=proc('96')>
 <img src='screens3.jpg' onclick=proc('01')>
 <DIV id='waitDiv' style='z-index:1; left: 47%; visibility: visible; position: absolute; top: 50%; text-align: center; background-color=yellow; border-style=groove'><FONT color=red><B><BIG>Идёт загрузка...</BIG></B><BR><IMG src='loading.gif'><BR>Пожалуйста, подождите.</FONT></DIV>
 <div id='ts'></div><script>proc('62')</script>
</body>
</html>

Мне нужно чтоб LOADING появлялся не при загрузке страницы, а при вызове proc() и после её отработки он исчезал

рони 27.07.2017 10:16

DjFuntik,
не знаю как работает ваша RunJava, может эта функция блокирует браузер на всё время загрузки и показывать что либо бесполезно.

DjFuntik 27.07.2017 11:03

Вот она
function RunJava(resurs)
{
var fso = new ActiveXObject("Scripting.FileSystemObject")
var b = fso.FileExists(resurs)
if (b) { eval(fso.OpenTextFile(resurs, 1, 0).ReadAll()) }
}

Eval - Функция eval разрешает динамическое выполнение исходного кода JavaScript. Код, переданный в функцию eval, выполняется в том же контексте, в котором вызывается функция eval.
OpenTextFile - Открывает указанный файл и возвращает объект TextStream, который можно использовать для чтения из файла или добавления данных в файл.
формат: object.OpenTextFile(filename[, iomode[, create[, format]]])
iomode: Необязательный. Указывает режим ввода-вывода. Может иметь значение одной из двух констант: ForReading=1(моё!) или ForAppending=8.
create: Необязательный. Значение типа Boolean, которое указывает, можно ли создать новый файл, если файл не существует. True позволяет создать файл, а False - нет(моё!).
ReadAll - Выполняет чтение всего файла TextStream и возвращает результирующую строку.

Т.е. прочитать файл содержащий java код и выполнить его!

В загружаемом и соответственно далее исполняемом файле находится несколько вызовов процедуры
stroka ([["66","#"],["+","А1"],["+","Б1"],["-","В8"],["-","Г4"],["+","Д5"]]).
Сама процедура ничего заумного не делает, просто на основании данных массива формирует HTML код для нарисования таблицы.
Очищаем переменную os='', и вызываем RunJava, выполнение его приводит к запуску процедуры STROKA(colon) из файла js,
а т.к. EVAL имеет доступ ко всем переменным, то результат выполнения STROKA будет находиться в нашей переменной os, которую мы потом через innerHTML отобразим.
Вот собственно и всё. Ничего о блокировках я в описаниях по командам не нашёл.

DjFuntik 27.07.2017 11:15

Собственно, убрал RunJAVA и воткнул несколько строк STROKA(colon).... блокировать браузер нечем! Файл не загружается, eval не выполняется..... LOADING так и не появился.... значит не RUNJAVe причина

рони 27.07.2017 11:28

DjFuntik,
танцы с бубнами ... перед RunJAVA
добавьте
document.documentElement.clientWidth;

DjFuntik 27.07.2017 12:11

нет, если вы намекаете, то что LOADING попадает "куда-то" вне видимой области, то нет - если из
<DIV id='waitDiv' style='z-index:1; left: 47%; visibility: visible;
удалить "visibility: visible;", то LOADING отображается в центре экрана, а значит местоположение правильное

рони 27.07.2017 12:22

DjFuntik,
картинка не показывается в 3 случаях -- не загружена (браузер не хочет грузить невидимое,может помочь прелоад), не нарисована(пост 23, после изменения ксс дать странице перерисоваться), комп занят загрузкой с сервера(???). всё, более причин не знаю и помочь не могу.

DjFuntik 27.07.2017 12:55

Ну вот смотрите пост 19 закомментироуйте строки 23 и 27, в строке 37 удалите "visibility: visible;" и запустите. LOADING будет отображаться поверх основного содержимого ибо "z-index:1". Т.е. всё нормально загружено и в нужном месте отображается. На счёт загрузки с сервера (хм), ну так я ж убрал RunJAVA, и соответственно нечего грузить с сервера

рони 27.07.2017 13:14

DjFuntik,
испорченный телефон, если без RunJAVA картинка есть, значит ваша загрузка блокирует показ и весь браузер, пока браузер не загрузит то что нужно, он ничего больше делать не будет, в том числе и показывать картинки.

DjFuntik 27.07.2017 13:14

Ну к примеру, тут загрузки с сервера и строки 16 и 23 никак ни на что не влияют, если 23 строку закомментировать, то LOADING 16-ой строкой делается видимым,т.е. оно работает, а т.к. в конечном счёте его не видно, то значит и строка 23 работает.... но почему оно выполняется как-то не последовательно ума не приложу......
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<SCRIPT language=JavaScript>
var colon = new Array()
function stroka(colon)
{
 os += "<TABLE><TR>"
 for (var i = 1; i < colon.length; i++)
  os += "<TD><P>....<IMG src='" + colon[i][1]+ ((colon[i][0]=="+")?"":"-") + ".jpg'>...</TD>"
 os+="</TR></TABLE>"
}
  
function proc(js)
{
 document.all["waitDiv"].style.visibility = 'visible' // или document.getElementById('waitDiv').style.display='block'
 os = ""
 ts.innerHTML = os
 if (js==62) stroka ([["66","#"],["+","А1"],["+","Б1"],["-","В8"],["-","Г4"],["+","Д5"]])
 if (js==96) stroka ([["67","#"],["+","А2"],["-","Б3"],["+","В7"],["+","Г9"],["-","Д1"]])
 if (js==01) stroka ([["68","#"],["+","А3"],["+","Б5"],["-","В1"],["+","Г2"],["+","Д8"]])
 setTimeout('ts.innerHTML = os;', 5000);
 document.all["waitDiv"].style.visibility = 'hidden' // или document.getElementById('waitDiv').style.display='none'
}
</script>
</head>
 
<body>
 <img src='screens1.jpg' onclick=proc('62')>
 <img src='screens2.jpg' onclick=proc('96')>
 <img src='screens3.jpg' onclick=proc('01')>
 <DIV id='waitDiv' style='z-index:1; left: 47%; visibility: visible; position: absolute; top: 50%; text-align: center; background-color=yellow; border-style=groove'><FONT color=red><B><BIG>Идёт загрузка...</BIG></B><BR><IMG src='loading.gif'><BR>Пожалуйста, подождите.</FONT></DIV>
 <div id='ts'></div><script>proc('62')</script>
</body>

</html>

рони 27.07.2017 13:15

DjFuntik,
больше мне добавить нечего.

DjFuntik 27.07.2017 13:23

О! 23 строку вписал в 22 и эффект почти то что нужно... счас дальше посмотрю подойдёт ли мне в мою детищу

P.S> неа... только при первой загрузке срабатывает, при повторном вызове proc() уже ничего нет


PSS> Вообщем решил проблему так:
setTimeout('ts.innerHTML = os; initToolTips("img"); document.getElementById("waitDiv").style.display=" none"; document.getElementById("monets").style.display="b lock"', 100);
Может не совсем корректно, но зрительно очень похоже на правду


Часовой пояс GMT +3, время: 18:19.