newz20

 
<<< Back

Переключение режима устройства долгим удержанием

Появляется возможность включения дополнительного режима (вызова метода) долгим нажатием на сцене.

Данный материал полностью принадлежит пользователю London.
Был показан https://t.me/MajorDoMoRu/175332 в чате , но из-за отсутствия времени у автора, описан тут.

3

Вот такие кнопки реагирующие на длительное нажатие и включающие режим "авто"

Первым делом разложим необходимые файлы в их папки.

файл templates_alt/classes/views/SControllers_mini.html Создаем или копируем из папки templates.

В его содержимом должен быть только этот код :


<div class="controller type_switch state_%.status|"off;on"% %.alive|"state_notAlive;"% %.autoMode|";automode"%"
     onClick='callMethod("%.object_title%.switch");
     $.get("<#ROOTHTML#>ajax/devices.html?op=clicked&object="+encodeURIComponent("%.object_title%"));'
     ontouchstart='timer = setTimeout(function(){callMethod("%.object_title%.switchAutoMode");},500);$(this).addClass("pressed");'
     ontouchend='clearTimeout(timer);$(this).removeClass("pressed");'
     onmousedown='timer = setTimeout(function(){callMethod("%.object_title%.switchAutoMode");},500);$(this).addClass("pressed");'
     onmouseup='clearTimeout(timer);$(this).removeClass("pressed");'
     style='%.icon|"background-image:url(%.icon%)"%'
>
<span>%.object_description%</span>
</div>

Два файла картинок скачиваем кладем по пути /img/elements/

Теперь на сцене создаем пустой блок html и прописываем ему CSS (я создал пустой с названием понятным, чтобы потом понимать где оно и что)


    .type_mode.state_off.style_nobodyhome {
background-image: url(/cms/scenes/styles/mode/../mode/i_play_active.png);
background-repeat: no-repeat;
background-position: center 4px;
}
.type_mode span {
font-size:12px;
display: inline-block;
height:34px;
vertical-align: middle;
padding-top:35px;

}
.type_mode {
            margin-right: -2px;
            margin-bottom: 10px;
margin-left: 10px;
            color:black;
            border:1px solid rgba(255,255,255,0.5);
            text-align: center;
            background-color:rgba(255,255,255,0.7);
            padding:2px;
            width:67px;
            height:67px;
}
 html {
 -webkit-touch-callout: none !important; /* iOS Safari */
-webkit-user-select: none !important;   /* Chrome/Safari/Opera */
-khtml-user-select: none !important;    /* Konqueror */
-moz-user-select: none !important;      /* Firefox */
-ms-user-select: none !important;       /* Internet Explorer/Edge */
user-select: none !important;           /* Non-prefixed version, currently  not supported by any browser */
}
.automode {
    display:inline-block; /* запрещает перенос текста на следующую строку */
    text-decoration:none;
    position:relative;
}
.automode:before {
    content:'';
    position:absolute;
    display:block;
    width:auto;
    height:auto;
    left:5%;
    top:5%;
    right:0;
    bottom:0;
    background: rgba(0,0,0,0) url(/img/elements/relayautomode.svg) no-repeat;
    background-size:20% 20%; /* растягивает фон на всю ширину и высоту блока */
    z-index: 10 !important;
}

state_notAlive {
    display:inline-block; /* запрещает перенос текста на следующую строку */
    text-decoration:none;
    position:relative;
}

.state_notAlive {
    display:block;
    position:relative;
    overflow:hidden; /* запрещает обтекать другие блоки */
 z-index: 10 !important;
}

state_notAlive:before,
.state_notAlive:before {
    content:'';
    position:absolute;
    display:block;
    width:auto;
    height:auto;
    left:15%;
    top:15%;
    right:0;
    bottom:0;
    background: rgba(0,0,0,0) url(/img/elements/cross.svg) no-repeat;
    background-size:85% 85%; /* растягивает фон на всю ширину и высоту блока */
    z-index: 10 !important;
}   

А в нужном элементе ставим шаблон мини
1

Осталось создать метод switchAutoMode который сообственно и срабатывает при длительном нажатии и свойство autoMode в которое будет писаться статус режима
У меня он создан тут SDevices/SControllers/SRelays

Это вписываем в него

$this->setProperty('autoMode',!$this->getProperty('autoMode'));

2

Теперь при нажатии длительном на кнопку, у вас будет загораться индикатор авто режима.

Большое спасибо всем, кто помогает мне и остальным решать такие вот задачки.

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

Discuss (0) (25)

See also:
2020-10-26 Немного о безопасности.
2020-04-09 Автоматизация бэкапов (полный/мини) через модуль Backup от Eraser1981
2020-04-09 Добавление прокси в сценарий для обхода блокировки
2020-02-19 Правильно привязываем свойства и методы в настройках Модулей
2020-01-23 Как привязать метод к свойству или разберемся в структуре объектов
2019-10-03 Получение адреса по координатам.
2019-09-13 Ввод пин-кода или киношный экран разблокировки версия исправленная и доработанная
2019-09-12 Ввод пин-кода или киношный экран разблокировки
2018-11-12 Получение данных со стороннего сайта (аналог веб-переменным)
2018-09-26 Светильник на ws2812 + светильник с аккумулятором (часть прошивка)
2018-09-24 Светильник на ws2812 + светильник с аккумулятором (часть сборка)
2018-09-17 Немного про правильную перезагрузку.
2018-09-14 Светильник на ws2812 + светильник с аккумулятором

Краснодар, Россия

На форуме: newz20