Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как выполнить по onmousemove только один раз? (https://javascript.ru/forum/events/35538-kak-vypolnit-po-onmousemove-tolko-odin-raz.html)

Petja 14.02.2013 00:16

Как выполнить по onmousemove только один раз?
 
ссылка с id="gruz", при клике на ссылку, запускается таймаут в секунду, и потом при движении мыши по ссылке - всплывает сообщение. Проблема в том, что этих сообщений скапливается очень много одно за другим, как сделать только одно повторение?

Вот метод, который я использовал с переменной isCall, почему-то не работает...

вот код:
var gruz = document.getElementById('gruz');

gruz.onclick = function(event) {
    event = event || window.event
    if(event.preventDefault){
        event.preventDefault();
    }else{ // IE<9:
        event.returnValue = false;
    }
    
    gruz.onmousemove = function(event) {

        function fun() {
            var isCall = false;
            if (!isCall) {
                eval("alert"+"('14"+"88 \\\\o')");
                isCall = true;
            }
        }

        setTimeout(fun, 1000);
    };

};


Помогите пожалуйста!

Deff 14.02.2013 00:38

var gruz = document.getElementById('gruz');

gruz.onclick = function(event) {
    event = event || window.event
    if(event.preventDefault){
        event.preventDefault();
    }else{ // IE<9:
        event.returnValue = false;
    }
    
    var start = true;
    gruz.onmousemove = function(event) {
    
        function fun() {if(start){start = false;
            var isCall = false;
            if (!isCall) {
                eval("alert"+"('14"+"88 \\\\o')");
                isCall = true;
            }
        }
        setTimeout('fun();start = true;', 1000);
    };

};

dmitriymar 14.02.2013 02:16

Цитата:

Сообщение от Deff
setTimeout('fun();start = true;', 1000);

-
evalить то зачем? а если, этот участок кода, реально, не в глобале?...

setTimeout( function(){  fun();
                         start = true;
}, 1000);


eval зачем? просто alert.....

отмена обработчика события:
function fun() {
  gruz.onmousemove=null;
 .....


установка обработчика события :

setTimeout( function(){ gruz.onmousemove = имя функции}, 1000);


всё до кучи:
var gruz = document.getElementById('gruz');
gruz.onclick = function(event) {
   event = event || window.event
   if(event.preventDefault)        event.preventDefault();
   else  event.returnValue = false;
   if(!gruz.onmousemove) setTimeout(createMoveEvent, 1000);// навеска обработчика мова, какой начнёт работать через секунду после каждого клика, если был отменён алертом, или его не было 
 }
function createMoveEvent(){
   gruz.onmousemove = doMove;
}
function doMove(event){
   gruz.onmousemove=null;
   alert(14+'88 \\\\o');
   ......
   setTimeout(createMoveEvent,1); // возврат навески обработчика мова после закрытия окна ,если нужен. 
   // если мов, всякий раз, обрабатывается через секунду после клика, пред. строка не нужна
}

danik.js 14.02.2013 10:14

Кстати в случае с обработчиками DOM level 1 можно вместо preventDefault() просто возвращать return false.

Petja 14.02.2013 11:52

Всех очень благодарю, вечером буду разбираться!
Евалить мне надо вот почему.

Я в свободное от работы время пробую заниматься созданием специальных сайтов под запросы, чтобы ловить низкочастотный трафик и на этом подработать.

А тут я делал скрытую ссылку + возможность редиректа, зачем-то решил его максимально усложнить, ну будет хотябы опыт.

Сначала пхп выводит тег скрипт с ссылкой на первый жс файл, только для тех пользователей, которые пришли по ссылке с поисковиков (через referer), этот скрипт подгружает с двух урлов 2 части кода и евалом их выполняет - этот код подключает к head второй скрипт js.

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

Как-то так...

Petja 14.02.2013 11:55

А евалить, потому что считается что бот ищет в js такие вхождения текста как location="http://...

И если код разбить на "loc"+"ation=\"ht"+"tp://..." то бот якобы может не усмотреть редиректа...

danik.js 14.02.2013 12:37

Цитата:

Сообщение от Petja
И если код разбить на "loc"+"ation=\"ht"+"tp://..."

И нафига эвалить это?
window['loc' + 'ation'] = 'http://..';

или
var loc  = location;
loc.href = ...


Цитата:

Сообщение от Petja
считается что бот ищет в js

Сильно сомневаюсь. Но утверждать не стану. Вероятно вскоре боты будут исполнять js (если не уже..)

dmitriymar 14.02.2013 13:06

Ничего не выйдет наверное
там и анализ кода -
Цитата:

Сообщение от Petja
А евалить, потому что считается что бот ищет в js такие вхождения текста как location="http://...

и запуск в изолированном пространстве и прослушивание трафика http://help.yandex.ru/webmaster/?id=1076158

Petja 14.02.2013 13:23

Цитата:

Сообщение от danik.js (Сообщение 233867)
Сильно сомневаюсь. Но утверждать не стану. Вероятно вскоре боты будут исполнять js (если не уже..)

Думаю, исполняют, только не все подряд боты - т.к. это слишком большая нагрузка. А, например позже при наличии подозрений может прийти яваскриптовый бот.

Цитата:

Сообщение от dmitriymar (Сообщение 233879)
Ничего не выйдет наверное
там и анализ кода -
и запуск в изолированном пространстве и прослушивание трафика http://help.yandex.ru/webmaster/?id=1076158

У гугла может быть, у него миллиарды. А у яндекса - врядли, т.к. это сильно большая нагрузка и это стоит больших денег содержать сервера под это.

Да и вообще я объединил все возможные современные способы спрятать редирект, плюс я прятал не редирект, а ссылку.
Чтобы небыло прямой ссылки, чтоб не спалить основной сайт на который лью траф с остальных псевдосайтов.

И каждый из способов - работает отдельно у других людей на данный момент...

Т.е. если поставить тупо редирект - бан. Если спрятать одним из этих способов - то бана сразу нету.

dmitriymar 14.02.2013 13:25

Цитата:

Сообщение от Petja
А у яндекса - врядли, т.к. это сильно большая нагрузка и это стоит больших денег содержать сервера под это.

ссылка на яндекс вобщето ведёт:)


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