Создание класса
Задача:
Создать класс который будет способен выводить произвольное число на экран иммитируя цифровой дисплей
Объект класса должен подстраиваться под разрядность, дробность и знак числа автоматически исходя из получаемого для отображения числа
Объект должен иметь настройки по-умолчанию, также давать возможность настраивать цвет и размер выводимого дисплея
Интерфейсная часть объекта должна состоять из трех частей:
- Слева знак “минус”. Отображается только если число отрицательная
- Повторяющийся элемент, состоящий из сегментов, отображающих число и разделителя дробной и целой части
- Конечная часть в виде сегмента, отображающего число без идущего за ним разделителя
План работы
Формулирование свойств
- Значение выводимого числа ( INT или FLOAT)
- Цвет фона (RGB, или HEX, или INT)
- Цвет чисел (RGB, или HEX, или INT)
- Высота знака (INT >=7)
- Разрядность (INT)
- Идентификатор (TEXT)
Формулирование методов
- Указатель на объект или FALSE=Конструктор (id,[значение]=0,[Высота знака]=7 ,[Цвет чисел]=”#000000″, [Цвет фона]=”#FFFFFF”)
- TRUE или FALSE=Деструктор ()
- TRUE или FALSE=Установить значение (новое значение)
блок-схема алгоритма метода изменения значения (установки нового значения) pdf / graph
- TRUE или FALSE=Установить стиль (код параметра, новое значение)
- Установить высоту цифр
- Установить цвет цифр
- Установить цвет фона
- Значение или FALSE=Считать значение
- TRUE или FALSE=Обнулить значение
- TRUE или FALSE=Сбросить стиль
- TRUE или FALSE=Вывод сообщения об ошибке
Установление связи между свойствами
Свойство Разрядность зависит от свойства Значение выводимого числа по следующему правилу:
- Если выводимое значение является положительным целым числом, то разрядность дисплея равна количеству цифр, из которых состоит заданное число
- Если выводимое значение является положительным дробным числом, то разрядность дисплея равна количеству цифр, из которых состоит заданное число (десятичны разделитель не считается цифрой)
- Если выводимое значение является отрицательным числом, то разрядность дисплея увеличивается на 1 по причине вывода в начале числа символа Минус
Свойства Цвет фона и Цвет чисел не должны быть одинаковыми по значению
Свойство Идентификатор должно быть уникально по отношению к тому же свойству дргуих объектов
Установление связи между методами
Метод Конструктор при выполнении после создания интерфейсной и программной части запускает на исполнение методы Установить значение и Установить стиль
Первая версия функции
<html> <head> <title></title> <meta charset="utf-8" /> </head> <body> <div> <div class="tablo"></div> <div class="tikTak2"></div> </div> </body> <script> function tabloBuilder(place,digit,hSize=7,fColor="#000",bgColor="#FFF"){ digiLib=new Array(); digiLib[0]=Array(0,1,0,1,0,1,0,0,0,1,0,1,0,1,0); digiLib[1]=Array(0,0,0,0,0,1,0,0,0,0,0,1,0,0,0); digiLib[2]=Array(0,1,0,0,0,1,0,1,0,1,0,0,0,1,0); digiLib[3]=Array(0,1,0,0,0,1,0,1,0,0,0,1,0,1,0); digiLib[4]=Array(0,0,0,1,0,1,0,1,0,0,0,1,0,0,0); digiLib[5]=Array(0,1,0,1,0,0,0,1,0,0,0,1,0,1,0); digiLib[6]=Array(0,1,0,1,0,0,0,1,0,1,0,1,0,1,0); digiLib[7]=Array(0,1,0,0,0,1,0,0,0,0,0,1,0,0,0); digiLib[8]=Array(0,1,0,1,0,1,0,1,0,1,0,1,0,1,0); digiLib[9]=Array(0,1,0,1,0,1,0,1,0,0,0,1,0,1,0); digiLib[10]=Array(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0); digiLib[11]=Array(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0); tiktak=document.getElementsByClassName(place); // массив тегов, у которых указан class N=tiktak.length; for(j=0; j<N;j++){ tiktak[j].style.display="inline-block"; tiktak[j].style.width="auto"; tiktak[j].style.height=hSize+"px"; tiktak[j].style.backgroundColor=bgColor; cellsW=Array(25,50,25,25,50,25,25,50,25,25,50,25,25,50,25); cellsH=Array(14,14,14,29,29,29,14,14,14,29,29,29,14,14,14); M=digit.toString().length; for(k=0;k<M;k++){ newDigi=document.createElement("div"); newDigi.style.display="inline-block"; newDigi.style.width=parseInt(hSize/2)+"px"; newDigi.style.height=hSize+"px"; digiVariant=digit.toString().charAt(k); if(digiVariant=="."){digiVariant=10;} if(digiVariant=="-"){digiVariant=11;} cellsBG=digiLib[digiVariant]; for(i=0;i<15;i++){ newDiv=document.createElement("div"); newDiv.style.display="inline-block"; newDiv.style.borderRadius="40%"; newDiv.style.width=cellsW[i]+"%"; newDiv.style.height=cellsH[i]+"%"; if(cellsBG[i]==1){ newDiv.style.backgroundColor=fColor; } newDigi.appendChild(newDiv); } tiktak[j].appendChild(newDigi); } } } tabloBuilder("tablo",-169,300,"cyan","black"); </script> </html>
Вторая версия. Класс
<html> <head> <title></title> <meta charset="utf-8" /> <script> class tabloid{ constructor(place,digit,hSize=7,fColor="#000",bgColor="#FFF"){ var digiLib=new Array(); digiLib[0]=Array(0,1,0,1,0,1,0,0,0,1,0,1,0,1,0); digiLib[1]=Array(0,0,0,0,0,1,0,0,0,0,0,1,0,0,0); digiLib[2]=Array(0,1,0,0,0,1,0,1,0,1,0,0,0,1,0); digiLib[3]=Array(0,1,0,0,0,1,0,1,0,0,0,1,0,1,0); digiLib[4]=Array(0,0,0,1,0,1,0,1,0,0,0,1,0,0,0); digiLib[5]=Array(0,1,0,1,0,0,0,1,0,0,0,1,0,1,0); digiLib[6]=Array(0,1,0,1,0,0,0,1,0,1,0,1,0,1,0); digiLib[7]=Array(0,1,0,0,0,1,0,0,0,0,0,1,0,0,0); digiLib[8]=Array(0,1,0,1,0,1,0,1,0,1,0,1,0,1,0); digiLib[9]=Array(0,1,0,1,0,1,0,1,0,0,0,1,0,1,0); digiLib[10]=Array(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0); digiLib[11]=Array(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0); digiLib[12]=Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); var tiktak=document.getElementsByClassName(place); // массив тегов, у которых указан class var N=tiktak.length; for(var j=0; j<N;j++){ tiktak[j].style.display="inline-block"; tiktak[j].style.width="auto"; tiktak[j].style.height=hSize+"px"; tiktak[j].style.backgroundColor=bgColor; var cellsW=Array(25,50,25,25,50,25,25,50,25,25,50,25,25,50,25); var cellsH=Array(14,14,14,29,29,29,14,14,14,29,29,29,14,14,14); var M=digit.toString().length; for(var k=0;k<M;k++){ var newDigi=document.createElement("div"); newDigi.style.display="inline-block"; newDigi.style.width=parseInt(hSize/2)+"px"; newDigi.style.height=hSize+"px"; var digiVariant=digit.toString().charAt(k); if(digiVariant=="."){digiVariant=10;} if(digiVariant=="-"){digiVariant=11;} if(digiVariant==" "){digiVariant=12;} var cellsBG=digiLib[digiVariant]; for(var i=0;i<15;i++){ var newDiv=document.createElement("div"); newDiv.style.display="inline-block"; newDiv.style.borderRadius="40%"; newDiv.style.width=cellsW[i]+"%"; newDiv.style.height=cellsH[i]+"%"; if(cellsBG[i]==1){ newDiv.style.backgroundColor=fColor; } newDigi.appendChild(newDiv); } tiktak[j].appendChild(newDigi); } } } } </script> </head> <body> <div class="tablo"></div> </body> <script> T1=new tabloid("tablo",299,200) T2=new tabloid("tablo","95",100,"red") </script> </html>
Третья версия. Класс с методами
<html> <head> <title></title> <meta charset="utf-8" /> <script> class tabloid{ constructor(id,place,digit,hSize=7,fColor="#000",bgColor="#FFF"){ this.newDigits=new Array(); var tabloID=id; var digiLib=new Array(); digiLib[0]=Array(0,1,0,1,0,1,0,0,0,1,0,1,0,1,0); digiLib[1]=Array(0,0,0,0,0,1,0,0,0,0,0,1,0,0,0); digiLib[2]=Array(0,1,0,0,0,1,0,1,0,1,0,0,0,1,0); digiLib[3]=Array(0,1,0,0,0,1,0,1,0,0,0,1,0,1,0); digiLib[4]=Array(0,0,0,1,0,1,0,1,0,0,0,1,0,0,0); digiLib[5]=Array(0,1,0,1,0,0,0,1,0,0,0,1,0,1,0); digiLib[6]=Array(0,1,0,1,0,0,0,1,0,1,0,1,0,1,0); digiLib[7]=Array(0,1,0,0,0,1,0,0,0,0,0,1,0,0,0); digiLib[8]=Array(0,1,0,1,0,1,0,1,0,1,0,1,0,1,0); digiLib[9]=Array(0,1,0,1,0,1,0,1,0,0,0,1,0,1,0); digiLib[10]=Array(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0); digiLib[11]=Array(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0); digiLib[12]=Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); var tiktak=document.getElementsByClassName(place); // массив тегов, у которых указан class var N=tiktak.length; for(var j=0; j<N;j++){ tiktak[j].style.display="inline-block"; tiktak[j].style.width="auto"; tiktak[j].style.height=hSize+"px"; tiktak[j].style.backgroundColor=bgColor; var cellsW=Array(25,50,25,25,50,25,25,50,25,25,50,25,25,50,25); var cellsH=Array(14,14,14,29,29,29,14,14,14,29,29,29,14,14,14); var M=digit.toString().length; for(var k=0;k<M;k++){ var newDigi=document.createElement("div"); newDigi.setAttribute("tabloID",id); newDigi.style.display="inline-block"; newDigi.style.width=parseInt(hSize/2)+"px"; newDigi.style.height=hSize+"px"; this.newDigits.push(newDigi); var digiVariant=digit.toString().charAt(k); if(digiVariant=="."){digiVariant=10;} if(digiVariant=="-"){digiVariant=11;} if(digiVariant==" "){digiVariant=12;} var cellsBG=digiLib[digiVariant]; for(var i=0;i<15;i++){ var newDiv=document.createElement("div"); newDiv.style.display="inline-block"; newDiv.style.borderRadius="40%"; newDiv.style.width=cellsW[i]+"%"; newDiv.style.height=cellsH[i]+"%"; if(cellsBG[i]==1){ newDiv.style.backgroundColor=fColor; } newDigi.appendChild(newDiv); } tiktak[j].appendChild(newDigi); } } } clearIt(){ for(var i=0;i<this.newDigits.length;i++){ this.newDigits[i].remove(); } delete this; //document.write(this.newDigits); } setValue(newValue){ } setStyle(attribute,newValue){ // цвет цифр // цвет фона // размер switch(attribute){ case "height": for(var i=0;i<this.newDigits.length;i++){ this.newDigits[i].style.height=newValue+"px"; this.newDigits[i].style.width=parseInt(newValue/2)+"px"; } break; } } readValue(){ return value; } setToZero(){ this.setValue(0); } resetStyle(){ this.setStyle("fColor","#000000"); this.setStyle("bgColor","#FFFFFF"); } errMessage(errCode){ } } </script> </head> <body> <div class="tablo"></div> </body> <script> T1=new tabloid("T1","tablo",2995,200); T2=new tabloid("T2","tablo","95",100,"red"); //T1.clearIt(); //T1.setStyle("height",100); </script> </html>
Четвертая версия. Метод обновления значения.
<html> <head> <title></title> <meta charset="utf-8" /> <script> class tabloid{ constructor(id,place,digit,hSize=7,fColor="#000",bgColor="#FFF"){ this.value=digit; this.place=place; this.bgColor=bgColor; this.fColor=fColor; this.newDigits=new Array(); this.hSize=hSize; var tabloID=id; this.tabloID=id; this.digiLib=new Array(); this.digiLib[0]=Array(0,1,0,1,0,1,0,0,0,1,0,1,0,1,0); this.digiLib[1]=Array(0,0,0,0,0,1,0,0,0,0,0,1,0,0,0); this.digiLib[2]=Array(0,1,0,0,0,1,0,1,0,1,0,0,0,1,0); this.digiLib[3]=Array(0,1,0,0,0,1,0,1,0,0,0,1,0,1,0); this.digiLib[4]=Array(0,0,0,1,0,1,0,1,0,0,0,1,0,0,0); this.digiLib[5]=Array(0,1,0,1,0,0,0,1,0,0,0,1,0,1,0); this.digiLib[6]=Array(0,1,0,1,0,0,0,1,0,1,0,1,0,1,0); this.digiLib[7]=Array(0,1,0,0,0,1,0,0,0,0,0,1,0,0,0); this.digiLib[8]=Array(0,1,0,1,0,1,0,1,0,1,0,1,0,1,0); this.digiLib[9]=Array(0,1,0,1,0,1,0,1,0,0,0,1,0,1,0); this.digiLib[10]=Array(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0); this.digiLib[11]=Array(0,0,0,0,0,0,0,1,0,0,0,0,0,0,0); this.digiLib[12]=Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); this.digiLib[13]=Array(0,0,0,0,0,0,1,0,0,0,0,0,1,0,0); var tiktak=document.getElementsByClassName(place); // массив тегов, у которых указан class var N=tiktak.length; for(var j=0; j<N;j++){ tiktak[j].style.display="inline-block"; tiktak[j].style.width="auto"; tiktak[j].style.height=this.hSize+"px"; tiktak[j].style.backgroundColor=bgColor; this.cellsW=Array(25,50,25,25,50,25,25,50,25,25,50,25,25,50,25); this.cellsH=Array(14,14,14,29,29,29,14,14,14,29,29,29,14,14,14); var M=digit.toString().length; this.valueLength=M; for(var k=0;k<M;k++){ var newDigi=document.createElement("div"); newDigi.setAttribute("tabloID",id); newDigi.style.display="inline-block"; newDigi.style.width=parseInt(this.hSize/2)+"px"; newDigi.style.height=this.hSize+"px"; this.newDigits.push(newDigi); var digiVariant=digit.toString().charAt(k); if(digiVariant=="."){digiVariant=10;} if(digiVariant=="-"){digiVariant=11;} if(digiVariant==" "){digiVariant=12;} if(digiVariant==":"){digiVariant=13;} var cellsBG=this.digiLib[digiVariant]; for(var i=0;i<15;i++){ var newDiv=document.createElement("div"); newDiv.style.display="inline-block"; newDiv.style.borderRadius="40%"; newDiv.style.width=this.cellsW[i]+"%"; newDiv.style.height=this.cellsH[i]+"%"; if(cellsBG[i]==1){ newDiv.style.backgroundColor=fColor; } newDigi.appendChild(newDiv); } tiktak[j].appendChild(newDigi); } } } clearIt(){ for(var i=0;i<this.newDigits.length;i++){ this.newDigits[i].remove(); } delete this; //document.write(this.newDigits); } setValue(newValue){ if(this.newDigits){// ----------======= 1 ========------------ var valueLength=this.newDigits.length;// ----------======= 3 ========------------ var newValueLength=newValue.toString().length;// 4 //alert(newValueLength-valueLength); if(valueLength<newValueLength){// 16 var Delta=newValueLength-valueLength; var tiktak=document.getElementsByClassName(this.place); for(var p=0;p<Delta;p++){ var newDigi=document.createElement("div"); newDigi.setAttribute("tabloID",this.tabloID); newDigi.style.display="inline-block"; newDigi.style.width=parseInt(this.hSize/2)+"px"; newDigi.style.height=this.hSize+"px"; for(var i=0;i<15;i++){ var newDiv=document.createElement("div"); newDiv.style.display="inline-block"; newDiv.style.borderRadius="40%"; newDiv.style.width=this.cellsW[i]+"%"; newDiv.style.height=this.cellsH[i]+"%"; newDigi.appendChild(newDiv); } tiktak[0].appendChild(newDigi); this.newDigits.push(newDigi); } }else{ var Delta=valueLength-newValueLength; for(var i=0; i<Delta; i++){ this.newDigits[valueLength-1-i].remove(); this.newDigits.pop(); } } valueLength=this.newDigits.length;// ----------======= 3 ========------------ //if(valueLength==newValueLength){ // 5 for(var j=0; j<newValueLength; j++){ // 6 var digiVariant=newValue.toString().charAt(j); //7 if(digiVariant=="."){digiVariant=10;} if(digiVariant=="-"){digiVariant=11;} if(digiVariant==" "){digiVariant=12;} if(digiVariant==":"){digiVariant=13;} var cellsBG=this.digiLib[digiVariant]; var i=0; for(var k=0; k<this.newDigits[j].childNodes.length;k++){ if(this.newDigits[j].childNodes[k].nodeName=="DIV"){ if(cellsBG[i]==1){ this.newDigits[j].childNodes[k].style.backgroundColor=this.fColor; }else{ this.newDigits[j].childNodes[k].style.background="none"; } i++; } } } //} } } setStyle(attribute,newValue){ // цвет цифр // цвет фона // размер switch(attribute){ case "height": for(var i=0;i<this.newDigits.length;i++){ this.newDigits[i].style.height=newValue+"px"; this.newDigits[i].style.width=parseInt(newValue/2)+"px"; } this.hSize=newValue; break; case "fColor": break; } } readValue(){ return value; } setToZero(){ this.setValue(0); } resetStyle(){ this.setStyle("fColor","#000000"); this.setStyle("bgColor","#FFFFFF"); } errMessage(errCode){ } } </script> </head> <body> <div class="tablo"></div> <div class="drugoeTablo"></div> </body> <script> T1=new tabloid("T1","tablo",2995,200); T2=new tabloid("T2","tablo","95",100,"red"); Tablo=new tabloid("Tablo","drugoeTablo","22.09.2015",150,"yellow","black"); T2.clearIt(); Tablo.setStyle("height",80); Tablo.setStyle("fColor","#CC9966"); Tablo.setStyle("bgColor","black"); Tablo.setValue("22.09.2018 22:45"); </script> </html>
Задание по теме:
- для метода setStyle класса tabloid доделать:
- Блок-схему алгоритма работы программы в режиме setStyle(“fColor”, “red”) – замена цвета цифр и setStyle(“bgColor”, “#000000”) – замена цвета фона
- Реализацию кода в соответствии с блок-схемой
- для метода readValue класса tabloid написать код.
-
Доделать метод “setStyle”:
- замена цвета цифр
- замена цвета фона
- замена радиуса скругления углов
- замена размеров поля вокруг табло
Создать метод “setSeconds”, который позволяет задавать время в секундах, а отображать в формате D:HH:mm:ss