Очередные Акции Блокировки форумов за скрытия-перемещения баннеров, навели на мысли, что данное направление еще слабо автоматизировано и слабо контролируемо:
К Внедрению предлагается такой Вариант:
<script type="text/javascript">
var OffsetUser=[];
function SetBannerUserPosition(top,left){OffsetUser.push(top);OffsetUser.push(left);
}function SetoBanner(){//Тест USER-установок
function TST_OffsetUser(){Lmin=-503;Lmax=33;TopMin=0;TopMax=544;
if(typeof(OffsetUser[0])=='number'&&typeof(OffsetUser[1])=='number'){//
if(OffsetUser[0]>=0&&OffsetUser[0]<=544&&OffsetUser[1]>=-503&&OffsetUser[1]<=33){return;}}OffsetUser=false;return;}var TopTh,LftThCtr;PrewLT=[];
Hb=60/*высота банера*/;Wb=468/*Ширина банера*/;LftMaxCtr=(1003)/2;TopMax=604-Hb;
//КОНТРОЛЬ СМЕЩЕНИЙ ЭЛЕМЕНТА ОТ ЦЕНТРА И ВЕРХА-НИЗА
function Tst_element(Selek,first){W=$(window).width();offset=Selek.offset();Tpad=parseFloat(Selek.css("padding-top"));
TopTh=(offset.top+Tpad);Lpad=parseFloat(Selek.css("padding-left"));LftThCtr=(offset.left+Lpad-W/2);absL=Math.abs(LftThCtr);
PrewLT[0]=TopTh;if(TopTh>=TopMax){PrewLT[0]=TopMax-TopTh};PrewLT[1]=LftMaxCtr-absL;if(LftThCtr>0){PrewLT[1]=PrewLT[1]-Wb}
if(typeof(first)=='boolean'){if(first){first={};if(PrewLT[0]<0||PrewLT[1]<0){PrewLT[0]=TopTh=0;LftThCtr=LftMaxCtr-Wb;PrewLT[1]=0}}}
}function TST_Hide(s,pT,pL){B="#pun-"+s;if(($(B).length)){Tst_element($(B));
if(Math.abs(Math.abs(PrewLT[1])-Math.abs(pL))>21||Math.abs(Math.abs(PrewLT[0])-Math.abs(pT))>7){
alert("Отправлен \"КУК-Report\":\nНеконтролируемое Перемещение Банера!,\n\
Смещения: Верх:"+PrewLT[0]+",От центра:"+PrewLT[1])};
}else{alert("Отправлен \"КУК-Report\":\nБаннер Скрыт!,\n\
Смещения: Верх:"+pT+",От центра:"+pL)};}//999999999999999= OСНОВНОЕ ТЕЛО: = 99999999999999999//
$(function(){S=Math.round(Math.random()*10000000);
TST_OffsetUser();if(!OffsetUser){Tst_element($("#pun-title td.title-logo-tdr"),true);
sek=Math.round(4000+120/*000*/*Math.random());setTimeout(function(){TST_Hide(S,PrewLT[0],PrewLT[1])},sek);}else
{TopTh=OffsetUser[0];LftThCtr=OffsetUser[1]}
$("body").prepend('<div id="pun-'+S+'" style="top:'+TopTh+'px;left:50%;margin-left:'+LftThCtr+'px;position:absolute!important;z-index:10000;width:'+Wb+'px;height:'+Hb+'px;"></div>');
Elem=$("#pun-title td.title-logo-tdr");Elem.find('script').remove();$('#pun-'+S).append(Elem.html());
Elem.html('<div id="Equ" "height:60px;width:480px;"></div>')
});
}SetoBanner()
//999999999999999 = END ТЕЛО = 99999999999999999//
</script>
Пользовательская часть -опционально(может отсутствовать)
<script type="text/javascript"> //Юзер Установки
/* Cмещение позиции Банера,задаваемого форум-aдминистратором относительно центра и верха экрана
(Первая цифра - смещение по вертикали; Вторая - по горизонтали;
Верхний край Баннера(Относительно верха экр.) можно смещать до 0px; - вверх;
Верхний край Баннера(Относительно верха экр.) можно смещать до 544px; - вниз;
Левый край Баннера(Относительно центра экр.) можно смещать до +33px -> вправо(Поскольку учитываем ширину баннера=468px;
Левый край Баннера(Относительно центра экр.) можно смещать до -503px;<- влево;
*/
SetBannerUserPosition(432,-240)
</script>
Пояснения:
Функция
1. Тестирует Есть ли юзер-установки в Допустимых Админом сервиса пределах, и если есть и допустимы - устанавливает верхний баннер согласно пользовательским установкам
* Пользовательские Установки - это вызов функции:
SetBannerUserPosition(432,-240)
где первая цифра - смещение от центра левого края баннера, вторая от верха
2. Если установки отсутствуют, либо не в Допустимых пределах, тестируется возможная позиция банера согласно текущего элемента #pun-title td.title-logo-tdr, если позиция в допустимых пределах, новая оболочка позиционируеся в соотвествии с позицией в исходном элементе, если нет, Баннер позиционируется в правый верхний угол экрана ( в допустимой позиции для разрешения 1024
3. Рандомно, через промежуток времени - позиция и скрытие баннера вновь проверяюца и если есть подвижки, изменение позиции, скрытие баннера, - Появляется Раздражающее-Предупреждающее Окно(возможна и отправка данных на сервер
Ps: Неокрашенная часть удобно устанавливается в Скрипт сервиса в хидер. Окрашенная, при желании пользователя сделать свои установки местоположения верхнего баннера, - В HTML верх,....(Возможно первую часть установить совместно с тизером в #pun-title td.title-logo-tdr,- тогда пользовательские установки переместить в HTML низ)
(*Вышеприведенный полный код Работает И сейчас приустановке в HTML верх
Тестирующий Код сss для Изменения Положений Баннера
<style>/**/
#pun-title td.title-logo-tdr{
display:block!important;
position:absolute!important;
height:60px!important;
padding-left:0px!important;
width:468px!important;
left:50%;
margin-left:-108px!important;
margin-top:120px!important;
padding-top:0px!important;
border:solid blue 1px;
}
</style>
Меняя значения Красным, - можно тестировать происходящее при выходе значений положения баннера из Допустимых
Можно пробовать и скриптами ( Учтите что время повторной проверки - рандомно
Защита от дурака при вводе невалидных значений для юзер-установок - присутствует.
Отредактировано Deff (Сб, 23 Фев 2013 14:39:20)