Показване на диалоговия прозорец на jQuery след X секунди превъртане на страницата

Използвайки jQuery 1.7.1, искам да покажа диалогов прозорец на потребителя и за двете обстоятелства...

  1. Приблизително след 15 секунди, когато страницата приключи със зареждането, ако не е извършено взаимодействие с потребителя, т.е. превъртане на страницата, щракване върху връзка. Трябва да се появи диалоговият прозорец.

  2. Ако след да речем 10 секунди има взаимодействие (превъртане на страница / щракване върху полето на формуляр), не е извършено по-нататъшно действие и потребителят все още е на същата страница. Трябва да се появи диалоговият прозорец.


Целта на това е да се покаже диалогов прозорец „имате ли нужда от помощ/обратна връзка“ на потребител, ако той все още е на същата страница за няколко секунди и не е превъртял или е превъртял и не е взаимодействал на страницата, т.е. поле за връзка / формуляр.

В диалоговия прозорец ще покажа връзка „Не е необходима помощ“, която трябва да скрие диалоговия прозорец и да спре отварянето му отново по време на сесията. Така че, ако се щракне върху тази връзка, диалогът и броячът трябва да бъдат спрени за остатъка от тази php сесия.


person David G    schedule 27.08.2013    source източник
comment
Погледнете потребителския интерфейс на jQuery. Също така, какво вече сте опитали?   -  person MisterBla    schedule 27.08.2013
comment
Вярвам, че сте отбелязали грешно PHP, тук няма нищо свързано.   -  person Daryl Gill    schedule 27.08.2013
comment
@DarylGill Една сесия е PHP. Но вместо това може да използва бисквитка или sessionStorage.   -  person MisterBla    schedule 27.08.2013
comment
@RichardA, това е нещо ново, което разглеждам, би предпочел php сесия, но може би трябва да е бисквитка.   -  person David G    schedule 27.08.2013
comment
@DarylGill планира да използва PHP за сесия, а не за скриптове.   -  person David G    schedule 27.08.2013
comment
@dg85 Tbh, sessionStorage е МНОГО по-лесен за използване за това. Недостатъкът обаче е, че е HTML5 и не се поддържа в IE 7 и по-стари, ако се стремите към това.   -  person MisterBla    schedule 27.08.2013
comment
@RichardA, опитах да търся, прилагайки забавяне към диалога след превъртане, но всичко, което изглежда получавам, е много информация за скриване на ленти за превъртане от диалога. Съсредоточавам се върху IE8+, всеки с IE7 сериозно се нуждае от надграждане, тъй като ie7 дори няма да показва анимирани gifs.   -  person David G    schedule 27.08.2013
comment
Може ли някой да ме насочи в правилната посока, тъй като удрям стена с това. И/или всеки подобен код би бил от голяма помощ.   -  person David G    schedule 27.08.2013
comment
@dg85 Работя върху пример.   -  person MisterBla    schedule 27.08.2013
comment
@RichardA, благодаря ти много   -  person David G    schedule 27.08.2013


Отговори (1)


Разгледайте модалния потребителски интерфейс на jQuery и sessionStorage.

Ето пример за това, което може да търсите:

function showHelpModal()
{
    // Open the dialog and reset the timer
    $('#mymodal').dialog('open');
    timeoutStarted = false;
}

var t; // Timeout variable
var timeout = 1500; // Timeout in milliseconds
var fakeSessionStorage = {}; // The fake sessionStorage, don't use this in your real code

$(document).ready(function()
{   
    // Initialize the dialog
    $('#mymodal').dialog(
    {
        autoOpen: false,
        height: 500,
        width: 500,
        modal: true,
        buttons: {
            "Don't remind me": function()
            {
                fakeSessionStorage.stopReminding = true;
                $(this).dialog('close');
            },

            "Yes, please": function()
            {
                $(this).dialog('close');
            }
        }
    });

    // Set default reminder value
    if(!fakeSessionStorage.stopReminding)
        fakeSessionStorage.stopReminding = false;

    // On scroll...
    $(document).scroll(function()
    {        
        // If the user doesn't want to be reminded, return false
        if(fakeSessionStorage.stopReminding)
        {
            console.log("Will not remind again");
            return false;
        }

        // Start the timer and prevent it from firing while busy
        timeoutStarted = true;
        clearTimeout(t);
        t = setTimeout(showHelpModal, timeout);
    });
});

И работещ пример в JSfiddle

Моля, имайте предвид, че sessionStorage не работи на JSfiddle, така че използвах обект, наречен fakeSessionStorage, за да покрия това.

Освен това sessionStorage не работи в Internet Explorer 7 или по-ранна версия.

[редактиране]
Свързах грешната цигулка, поправих го.

[редактиране 2]
Проблемът очевидно беше наличието на променлива timeoutStarted там. Мислех, че това е нещо необходимо, но върши повече лошо, отколкото добро.

person MisterBla    schedule 27.08.2013
comment
Гледах това отново и в примера с jsfiddle той се зарежда веднага след като превъртането е спряло, а не след изчакване, което си помислих, като гледах кода, че трябва да бъде. Дали това също е подобен проблем... Също така се задейства при превъртане (или при щракване върху бутоните със стрелки на лентата за превъртане, или при хващане на плъзгача и промяна на посоката в един момент без пауза. Вижте JSfiddle според вашия пример. Можете ли да предложите някаква редакция за това? - person David G; 03.09.2013
comment
@DavidG Вижте актуализирания ми отговор за новия код и обяснение защо. Това трябва да направи това, от което се нуждаете. - person MisterBla; 03.09.2013
comment
Опитах се да премахна променливата 'timeoutStarted' от предишния jsfiddle, но сега диалоговият прозорец не се зарежда. Опитах се да видя вашите актуализации jsfiddle, но връзката изглежда грешна, тъй като получава съобщение „Грешка 404“... връзка - person David G; 03.09.2013
comment
@DavidG Поправи връзката. Съжалявам за това. - person MisterBla; 03.09.2013
comment
@DavidG Радвам се, че мога да помогна. - person MisterBla; 03.09.2013
comment
Има ли някакъв начин да включите и проверка, за да видите кога курсорът на мишката е спрял да се движи, както и превъртането на страницата? ... Така че диалоговият прозорец се появява след X секунди, след като страницата е спряла да превърта и мишката да се движи - person David G; 11.12.2013
comment
@DavidG Да, добавете събитие .mousemove() към документа, оставете го да се изчисти и задайте таймаут при всяко движение на мишката. Когато не се движи, времето за изчакване трябва да изтече и тогава можете да го накарате да прави това, което искате. - person MisterBla; 12.12.2013