<! -- --> <ul data-menu="array" class="nav-menu-3 pc-width"> <li data-item_level_1="container" data-item_level_1-over='mouseover' data-item_level_1-out='mouseout' > <a href="#" > </a> <ul class="hover-non" data-item_level_1-submenuclass="class" data-item_level_1-group="group" > <!-- data-item_level_2="container" menu_level_2 - ---> </u> </li> </ul>
<! -- --> <ul data-menu="array" > <li data-item_level_1="container" > <a href="#" > </a> <ul > <!-- data-item_level_2="container" menu_level_2 - ---> </u> </li> </ul>
var State = { menu: { container: "item_level_1", /// item_level_1 this.htmlLink.querySelector(selector) /// dom data-item_level_1="container" props: [ ["submenuclass", "class", "ul:first-of-type"], ["group", "group", "ul:first-of-type"], ["toggle", 'click', ""], ["over", 'mouseover', ""], ["out",'mouseout', ""], ["listner_resize",'emiter-resize', ""], ["listner_click",'emiter-click-item_level_1', ""] ], /// , // toggle - 'emiter-resize' - , 'emiter-click-item_level_1' - toggle , 'emiter-click-item_level_1' id prop methods:{ over: function(){ this.parentContainer.props.submenuclass.removeProp("hover-non"); }, out: function(){ this.parentContainer.props.submenuclass.setProp("hover-non"); }, toggle: function(event){// // , , if(event.target.parentElement.dataset['item_level_1'] == undefined)return; //// emiter-click-item_level_1 id this.rootLink.eventProps['emiter-click-item_level_1'].setEventProp(this.parentContainer.id); // toggle this.prop = null ( ) if(this.prop == null){ /// ul this.parentContainer.props.submenuclass.removeProp("hover-non"); this.prop = 1; }else{ this.parentContainer.props.submenuclass.setProp("hover-non"); this.prop = null; } }, listner_resize: function(){ /// 'emiter-resize' ( this.emiter.getEventProp() ) click hover("mouseover", "mouseout") var windowSize = this.emiter.getEventProp(); var props = this.parentContainer.props; if(windowSize < 600){ props.over.disableEvent("mouseover"); props.out.disableEvent("mouseout"); props.toggle.enableEvent("click"); }else{ props.over.enableEvent("mouseover"); props.out.enableEvent("mouseout"); props.toggle.disableEvent("click"); } }, // 'emiter-click-item_level_1' ( '') listner_click: function(){ // id var id = this.emiter.getEventProp(); // if(this.parentContainer.id != id){ this.parentContainer.props.submenuclass.setProp("hover-non"); this.parentContainer.props.toggle.prop = null; } } } }, virtualArrayComponents: { //// menu_level_2:{ container: "item_level_2", props: [ ["group_2","group", "ul:first-of-type"], ["submenuclass", "class", "ul:first-of-type"], ["toggle", 'click', ""], ["over", 'mouseover', ""], ["out",'mouseout', ""],["listner_resize",'emiter-resize', ""], ["listner_click",'emiter-click-item_level_2', ""]], methods: { over: function(){ this.parentContainer.props.submenuclass.removeProp("hover-non"); }, out: function(){ this.parentContainer.props.submenuclass.setProp("hover-non"); }, toggle: function(){ this.rootLink.eventProps['emiter-click-item_level_2'].setEventProp(this.parentContainer.id); if(this.prop == null){ this.parentContainer.props.submenuclass.removeProp("hover-non"); this.prop = 1; }else{ this.parentContainer.props.submenuclass.setProp("hover-non"); this.prop = null; } }, listner_resize: function(){ var windowSize = this.emiter.getEventProp(); var props = this.parentContainer.props; if(windowSize < 600){ props.over.disableEvent("mouseover"); props.out.disableEvent("mouseout"); props.toggle.enableEvent("click"); }else{ props.over.enableEvent("mouseover"); props.out.enableEvent("mouseout"); props.toggle.disableEvent("click"); } }, listner_click: function(){ //console.log(this.emiter.getEventProp()); var id = this.emiter.getEventProp(); if(this.parentContainer.id != id){ this.parentContainer.props.submenuclass.setProp("hover-non"); this.parentContainer.props.toggle.prop = null; } } } }, menu_level_3:{ container: "item_level_3", props: [ ], methods: { } }, menu_level_3_img:{ container: "item_level_3_img", props: [ ], methods: { } }, }, eventEmiters: { ['emiter-resize']: {// prop: null, }, ['emiter-click-item_level_1']: { prop: 'id', // id }, ['emiter-click-item_level_2']: { prop: 'id', // id } } } window.onload = function(){ /// HTMLix var HM = new HTMLixState(State); HM.eventProps['emiter-resize'].setEventProp(window.innerWidth);// // ['emiter-resize'] window.onresize = function(){ HM.eventProps['emiter-resize'].setEventProp(window.innerWidth) } console.log(HM); }
Source: https://habr.com/ru/post/457520/
All Articles