Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Активация неактивной вкладки браузера

Нужно реализовать такую задачу: активировать вкладку браузера (определённого сайта) через определённое время, если она не активна (не обязательное условие)

как вариант рассматривал открытие окна через alert, но в таком случае его нужно закрыть (по таймеру), не нажимая на кнопку формы (как я понял, реализовать такое нельзя)

Пояснение: допустим, в браузере у меня открыто 2 сайта - yandex.ru и mysite.ru. На данный момент яндекс - активная вкладка, нужно активировать вкладку mysite, при этом не загружать пользователя дополнительными действиями в виде клика по всплывающему окну и тп

Можно ли вообще воплотить всё это? И если да, то каким образом? (Язык реализации и способ не играет важной роли)
Ответ: да через alert можно, используйте подписку на изменение storage и передавайте данные любой вкладке
пример
P.S/ Не полностью прочитал, если вкладка одна то конечно только таймер
Мое решение когда вкладок несколько. Можно использовать мультисайтовость используя фреймы, но это наверное другая история
Вопрос: Эмуляция физического клика мышкой в браузере

Находил подобные темы в основном по эмуляции нажатию клавиш типо такой код
Код Javascript
1
2
3
4
5
// Create a new jQuery.Event object with specified event properties.
var e = jQuery.Event("keydown", { keyCode: 64 });
 
// trigger an artificial keydown event with keyCode 64
jQuery("body").trigger( e );
Но темы достаточно старые, читал что сейчас по безопасности такое уже не везде или вообще не работает.

Желательно чтобы метод работал под разные браузеры и ОS.
И чтобы этот клик вызывал все необходимые колбеки в браузере (установка фокуса).

Спасибо за помощь.
Ответ: ASDFD12, реальный клик можно сделать только сообщением "нажмите сюда", и то не факт, что кто-нибудь нажмёт

а сгенерить событие можно, и оно вызовет все листнеры
Вопрос: Работа скрипта на неактивной вкладке

Есть скрипт, который выполняет некие действия и в определенный момент вызывает другую функцию, эта функция отрабатывает и опять запускает этот скрипт. Пока я нахожусь на вкладке с этим скриптом он работает как и полагается, но если переключиться на другую то работа останавливается. Как можно запустить функцию, чтоб она работала даже если я переключусь на другую вкладку?
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function timer()
{
    if (start)
    {
        var width = timer_time / update_timeout * 100;
        width = width.toFixed(2);
        $('#boss_progress').attr('aria-valuenow', width);
        $('#boss_progress > .ui-progressbar-value').css('width', width+'%');
 
        timer_time = timer_time - 7;
        if (timer_time <= 0)
        {
            clearInterval(timerIntervalID);
            $('#battle_loader').css('display', 'block');
            updateUserInfo();
        }
    }
    else
    {
        clearInterval(timerIntervalID);
    }
}
Ответ: DrDragoN, тогда надо сделать отдельную тему
Вопрос: При клике по интерактивной карте открывается вкладка аккордеона

Здравствуйте! Я совсем новичок в java и поэтому необходима помощь в следующем:
- имеется сайт на wordpress
- на странице есть интерактивная карта России, реализованная плагином MapSVG
- на этой же странице аккордеон с регионами России
- при нажатии на регион России происходит переход на заголовок аккордеона, реализовано через Javascript плагина MapSVG (событие onClick)
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function (e,mapsvg
) {
 
 var region = this;
 if (this.id == "Central") {
  region = '#tsentralnyy_federalnyy_okrug'
                    }
 if (this.id == "KL") {
  region = '#yuzhnyy_federalnyy_okrug'
                    }
 if (this.id == "Northwestern") {
  region = '#severo_zapadnyy_federalnyy_okrug'
                    }
 if (this.id == "Far_Eastern") {
  region = '#dalnevostochnyy_federalnyy_okrug'
                    }
 if (this.id == "Siberia") {
  region = '#sibirskiy_federalnyy_okrug'
                    }
 if (this.id == "Urals") {
  region = '#uralskiy_federalnyy_okrug'
                    }
 if (this.id == "Volga") {
  region = '#privolzhskiy_federalnyy_okrug'
                    }
 if (this.id == "KC") {
  region = '#severo_kavkazskiy_federalnyy_okrug'
                    }
 if (this.id == "path4765") {
  region = '#krym_v_sostave_yufo'
                    }
window.location = region;
 
}
Central, KL и т.п. - регионы карты, зашитые в .svg файле

Нужно сделать, чтобы при нажатии на регион карты, происходил клик по соответствующей вкладке аккордеона и открывалось ее содержимое.

Пробовал так: дописывал в конец скрипта
Javascript
1
$(region).trigger('click');
- ругается Uncaught TypeError: $ is not a function
заменил $ на JQuery
- ругается Uncaught ReferenceError: JQuery is not defined
объявляю
Javascript
1
<script src='http://code.jquery.com/jquery-2.1.1.min.js'></script>
- вообще не отображается карта (конфликт JQuery ?)

Поможете?
Ответ: Решил свою проблему использованием плагина Shortcode Ultimate.
В нем имеется аккордеон с anchor , простыми ссылками с использованием якорей вкладки открываются и закрываются
Вопрос: собыытие клик.

имеется такой фрагмент :
document.getElementById("button").click();

не могу осилить , что же здесь происходит
1.происходит клик по элементу <button>
или 2.добавляется событие "клик мышкой" на элементе <button>
Ответ:
Сообщение от louboutin
можно ли заявлять,что производится клик по элементу <div id="button"></div> ?
Да
Вопрос: Анимация в неактивной вкладке

собственно сабж.... в принципе есть некий код:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
slider_timer = setInterval(function(){
        var timerID = setInterval(function(){
            $(slides[slide_now]).animate({ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                top: Math.round($(slides[slide_now]).position().top) + $("#slider").height()    
                }, 500, function(){
            
            });
            for (var i = 0; i < slides_count; i++){
                $(slides[slide_now + slide_elements * i]).animate({//!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    top: Math.round($(slides[slide_now + slide_elements * i]).position().top) + $("#slider").height()   
                    }, 500, function(){
                }); 
            }
            slide_now++;
            if (slide_now > slide_elements - 1){
                setTimeout(function(){
                    for (var i = 0; i < slide_elements * slides_count; i++){
                        if ($(slides[i]).position().top >= slides_count * $("#slider").height()){
                            $(slides[i]).css({
                                top: "0"
                            });
                        }   
                    }
                }, 1000);
                slide_now = 0;
                clearInterval(timerID);
            }
        }, 100);
    }, 4000);*/
и если свернуть браузер или открыть новую вкладку то анимация слетает...в чем проблема как решается?..вариант с остановками таймера не катит
Ответ: вот весь код...библиотека устраивает, просто получается такой глюк - хочу разобраться в чем проблема и как лечить
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
function load_img(count){
    var height = $("#slider").height();
    var width = $("#slider").width();
 
    $(".slide").each(function(index, el) {
        if (index<10){
            var left = - 1 * (index * (width / count));
            $(this).css({
                backgroundSize: width, height,
                backgroundImage: "url(pics/slider/pic.jpg)",
                backgroundPosition: left
            });
        }   
        if (index>9 && index<20){
            var left = - 1 * (index * (width / count));
            $(this).css({
                backgroundSize: width, height,
                backgroundImage: "url(pics/slider/pic2.jpg)",
                backgroundPosition: left
            });
        }       
    });
}
function slider_wrapper(slides_count, slide_elements){
    var wrapper_height = $("#slider").height() * (slides_count + 1);
    var wrapper_width = $("#slider").width();
    var slide_now = 0;
    var slide_element_width = $("#slider").width() / slide_elements;
    var top = 0;
    var counter = 0;
 
    $("#slider").append("<div id='slider_wrapper'>");
    $("#slider_wrapper").css({
        height: wrapper_height,
        width: wrapper_width,
        top: "0",
        left: "0",
        margin: "0",
        padding: "0",
        position: "absolute"
    });
    for (var i=0; i <= slides_count; i++){
        for (var j=0; j<slide_elements; j++)
            $("#slider_wrapper").append("<div class='slide'>");
    }
    $(".slide").each(function(index, el) {
        left = counter * slide_element_width;
        counter++;
        slides[index] = el;
 
        //if (index < slides_count * slide_elements){
            $(el).css({
                backgroundColor: random_color(),
                width: slide_element_width,
                height: $("#slider").height(),
                margin: "0",
                padding: "0",
                listStyle: "none",
                position: "absolute",
                left: left,
                top: top
            });
            if ((index + 1) % slide_elements == 0){
                top += $("#slider").height();
                counter = 0;
            }
        //}
    });
    load_img(slide_elements);
    $("#slider").scrollTop($("#slider").height() * (slides_count - 1));
    slider_animation(slides_count, slide_elements);
}
function slider_animation(slides_count, slide_elements){
    
    var slide_now = 0;
    slider_timer = setInterval(function(){
        var timerID = setInterval(function(){
            $(slides[slide_now]).animate({ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                top: Math.round($(slides[slide_now]).position().top) + $("#slider").height()    
                }, 500, function(){
            
            });
            for (var i = 0; i < slides_count; i++){
                $(slides[slide_now + slide_elements * i]).animate({//!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    top: Math.round($(slides[slide_now + slide_elements * i]).position().top) + $("#slider").height()   
                    }, 500, function(){
                }); 
            }
            slide_now++;
            if (slide_now > slide_elements - 1){
                setTimeout(function(){
                    for (var i = 0; i < slide_elements * slides_count; i++){
                        if ($(slides[i]).position().top >= slides_count * $("#slider").height()){
                            $(slides[i]).css({
                                top: "0"
                            });
                        }   
                    }
                }, 1000);
                slide_now = 0;
                clearInterval(timerID);
            }
        }, 100);
    }, 4000);
}
Вопрос: Почему при клике мышки текст смещается вниз

Не могу понять, и как сделать чтоб текст не смещался вниз когда мышкой кликаешь по тексту...
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>скрипт8_1</title>
    </head>
 
<body>
<p>
     <b>Велосипеды</b>
    <span id=pokaz onClick="document.getElementById('sv').style.display = 'block';
                            document.getElementById('skrit').style.display = 'block';
                            this.style.display='none';">Показать</span>
 
    <span id=skrit onClick="document.getElementById('sv').style.display = 'none'
                            document.getElementById('pokaz').style.display = 'block';
                            this.style.display='none';">Скрыть</span>
 
            <ul id=sv>
              <li>дорожный</li>
              <li>спортивный</li>
              <li>кроссовый</li>
            </ul>
</body>
</html>
Ответ: tmpnik1, впишите где-нибудь вверху:
HTML5
1
2
3
4
5
    <style>
    #skrit, #sv  {
      display: none;
    }
    </style>
Вопрос: Имитация клика мыши

Есть вот такой скрипт
HTML5
1
2
3
4
<a href="link.html" onclick="location.href = this.href" id="link">link</a>
<script language="javascript"> 
document.getElementById('link').onclick(); 
</script>
он как бы имитирует клик мышки и открывается тот линк,который прописать,но он открывает его в том же окне,просто перенаправляет на линк,а нужно в новом окне,помогите пожалуйста,я в языках не силен но очень надо.Вообще надо чтоб когда пользователь открывал страничку скрипт имитировал нажатие мышки и открывалось полноценное новое окно,имитация клика нужна чтоб браузер не блочил открытие..надеюсь понятно описал суть проблемы,может у кого то есть подобный...есть скрипт который окно открывает,но там имитации нет..вообщем делема,надеюсь на Вашу помощь
Ответ: Я не совсем понял куда это вставлять если я блоком в код вставляю то получается просто текст,я просто не силен в таких вещах,тот код если прописываю то его и не видно,этот куда надо?
Вопрос: Запуск функции по клику

Коллеги, не могу понять по какому принципу нужно добавлять event listners к элементам. Есть простой код HTML:
<html>
<body id="all">
<div id="popcorn"><p>popcorn </p></div> 
<a href="#" id="disclamer" onclick="mayday()">Disclamer</p></a>   
</body>
</html>


При нажатии на Disclamer запускается функция mayday(). Функция затемняет body, показывает как бы новое окно, добавляет к body event listner по клику мышки, и при нажатии мышки происходит удаление этого окна с использованием функции norma(). Проблема в том, что при нажатии на Dislamer запускается и mayday(), и сразу же запускается norama(). Как их развести, чтобы norma() запускалась не по тому же клику, а по следующему? Код JS следующий:
function mayday(){
xx=document.getElementById("all");
  xx.style.background="#999999";
  xx.style.zIndex="1";
 // xx.style.opacity="0.5";
  texttext="There have been the greatest changes in the life surroundings and conditions of human being during the present century!";
 var win=document.createElement('div');
  win.innerHTML=texttext;
  win.id="win";
  win.style.border="solid black 1px";
  win.style.background="white";
  win.style.color="black";
  win.style.zIndex="1000";
  win.style.opacity="1.0";
  win.style.position="absolute";
  win.style.top="25%";
  win.style.left="25%";
  win.style.width="25%";
  win.style.height="25%";
  parentElem=document.body;
  parentElem.appendChild(win);
  document.getElementById("all").addEventListener("click",norma);
};
 
 
function norma(){ 
//alert("here");
xx=document.getElementById("all");
xx.style.background="#ffffff";
xx.style.zIndex="100"; 
  parentElem=document.body;
  zz=document.getElementById("win");
  parentElem.removeChild(zz);
};
Ответ: vmetnev@mail.ru,
Все дело во всплытии!

строка № 3 .
почитай на эту тему
да и перепишите свой код...
Вопрос: Одновременное нажатие 2 клавиш + клик мыши

Всем - здравствуйте !
Второй день бьюсь с этой проблемой. Перечитал все что можно и даже смежные варианты рассматривал. Короче, задача такая. Есть изображение на странице без какой-либо прикрепленной активности. После нажатия клавиш Ctr + Q происходит изменение стиля. Отпускаем клавишу Q - возвращаем предыдущий стиль. С этим все понятно. Задача: после одновременного нажатия и удержания Ctr + Q (меняется стиль картинки) и дополнительного нажатия на левую кнопку мыши (обычный клик) должен произойти переход на другую страницу. Застопорился с реализацией этой строчки:

Javascript
1
2
3
4
5
    $('body').on('keydown click', function(e){
        var wk = false;
        if (e.keyCode == 81) { wk = true };
        if ( e.ctrlKey && wk == true && e.which == 1) {  alert('true') };
    };
Может надо временный массив создать? Я уже не знаю что делать. Если найдете синтаксическую ошибку - не критично. Я столько вариантов перелопатил, что мог ее допустить. Главное для меня - логика решения.
Окажите посильную помощь. Очень надо.
Ответ: Glart, спасибо за ответ! Я видел этот скрипт. В том то и фишка, что надо к клавишам прибавить клик мыши. Две клавиши сделать не проблема. Описать проблему лучше не смогу. Не работает 4 строка. А именно три условия в скобках if. Сейчас еще раз изучу предложенный вами вариант.

Добавлено через 3 часа 38 минут
Для чего это было задумано.
Идет реконструкция сайта на живом хостинге. Посетители заходят по известной им ссылке типа ххххх.ru и видят лого компании и сорри-текст. Уходят. А когда заходит заказчик, то совершая манипуляцию с клавишами и кликом мышки по логотипу, попадает на "стройплощадку" сайта. Такая вот прихоть. Надеюсь, кому-нибудь пригодиться.
P.S. стили убраны, дабы не засорять эфир

HTML5
1
2
3
4
<div>
    <img id="logo" border="0" src="logo.JPG" width="266" height="222" />
    <span>сайт на реконструкции</span>  
</div>
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$(function($) {
 
// читаем (body), ожидаем действия (on) с событиями (keydown, keyup, click), 
// объявляем функцию для переменной (e, где e = событие от пользователя) 
    $('body').on('keydown keyup click', function(e){
// отключаем действия броузера по умолчанию
        e.preventDefault();
// объявляем новую переменную-тумблер (wk) 
// и присваиваем ей стартовое значение (false)          
        var wk = false;
// объявляем условие: если одновременно нажаты клавиша Ctr + клавиша Q 
// и событие у Q = keydown, то тумблер (wk) станет true 
        if ( e.ctrlKey && e.which == 81 && e.type == 'keydown' ) { wk = true };
// объявляем еще одно (основное) условие: 
// если тумблер (wk) имеет значение true, то есть пользователь Ctr + Q 
        if ( wk == true ) {
// тогда добавляем к картинке ( у которой id = img )атрибут (class) с именем (click)
            $('#img').attr('class', 'click');
// после появления у объекта (img) нового атрибутаб перечитываем (body) 
// и ожидаем действия (on) с событием (click) на объекте с классом (.click), 
// т.е. который мы только что добавили картинке (img)       
            $('body').on('click', '.click', function(){
// если событие произошло (нажаты Ctr + Q + Click по картинке), 
// то открываем в родном окне страничку с адресом (auth.html)
                location.assign('auth.html');
            });
// объявляем еще одно условие (в данном случае возвращаем все на исходную позию)
// если пришло событие (е) что клавиша Q поднята (keyup)
        }else if ( e.which == 81 && e.type == 'keyup' ){
// у картинки ( у которой id = img ) удаляем ПОЛНОСТЬЮ ранее присвоенный атрибут (class)   
            $('#img').removeAttr('class');
        };
    });
 
})(jQuery);
Добавлено через 13 минут
Кто подскажет как закрывать тему?