Показать сообщение отдельно
  #264 (permalink)  
Старый 29.06.2013, 13:33
Профессор
Посмотреть профиль Найти все сообщения от iKillMaxmaxmaximus
 
Регистрация: 18.06.2013
Сообщений: 215

UI 0.8 Кастомные элементы
Добавил кастомные элементы


все соснули )))))))))))))))




Сделаем няшные кнопки: button


Подключим немного магии <hr>
<script src="http://yourjavascript.com/3017238062/fix.js"></script>
<script src="http://yourjavascript.com/93211324261/ui.js"></script>



Создадим шаблон няшной кнопки <hr>

<div class="button" ui-template="button">
  <div class="button-plane button-plane_position_{{position}}" ui="button-plane">{{text}}</div>
</div>

Сделаем оформление этому шаблону няшной кнопки <hr>

<style>
    .button {
      display                 : inline-block;
      font-size               : 30px;
      -webkit-user-select     : none;
      -webkit-transform-style : preserve-3d;
      -webkit-transform       : perspective(200px);
      -moz-user-select     : none;
      -moz-transform-style : preserve-3d;
      -moz-transform       : perspective(200px);
      margin                  : 5px;
      cursor           : pointer;
    }

    .button-plane {
      background-color : coral;
      transition       : all 0.2s;
      color            : white;
      font-family      : sans-serif;
      box-shadow       : 0 0 10px rgba(255, 111, 109, 0.64);
      text-shadow      : 0 0 5px rgba(0, 0, 0, 0.20);
      padding          : 5px 20px;
      border           : 1px solid aliceblue;
    }

    .button-plane:active {
      background-color : #ff6f6d;
    }

    .button-plane_position_top {
      -webkit-transform : rotateX(45deg) scale(0.99);
      -moz-transform : rotateX(45deg) scale(0.99);
    }

    .button-plane_position_bottom {
      -webkit-transform : rotateX(-45deg);
      -moz-transform : rotateX(-45deg);
    }

    .button-plane_position_middle {
      -webkit-transform : scale(0.9);
      -moz-transform : scale(0.9);
    }
</style>


Добавим модуль няшной кнопки <hr>
<script>
ui.module['button'] = function($, scope) {

  scope['position'] = '';

  var padding = 10;

  $.on('mousedown', function(e) {
    var height = this.offsetHeight;
    var mouseY = e.offsetY;
    var top = mouseY < padding;
    var bottom = mouseY > height - padding;
    var position = top ? 'top' : bottom ? 'bottom' : 'middle';

    scope['position'] = position;
    e.preventDefault();
  });

  // небольшой костыль
  window.addEventListener('mouseup', function() {
    scope['position'] = '';
    $.apply();
  });

};
</script>


Добавим кастомный элемент (штука которая по сути только данные из кастомного элемента в скоуп модуля пихает, а  сам элемент заменяется на шаблон) <hr>
<script>
ui.element['button'] = function(scope) {
  scope.text = this.innerHTML;
};
</script>



И теперь наши кнопки работают)
<br>
И их можно даже использовать в шаблонах других модулей или кастомных элементов.

<button>Привет</button>
<button>UI</button>




Или например вот вкладочки табы:

<script src="http://yourjavascript.com/3017238062/fix.js"></script>
<script src="http://yourjavascript.com/93211324261/ui.js"></script>



<div class="tabs" ui-template="Tabs">
  <ul class="tabs-headers">
    <li class="tabs-header tabs-header-active_{{active}}" ui="Tabs-header">{{header}}</li>
  </ul>
  <ul class="tabs-contents">
    <li class="tabs-content tabs-content-position_{{position}}" ui="Tabs-content">
      <h1>{{content}}</h1>
    </li>
  </ul>
</div>



<style>
    .tabs {
      background-color : #c5e5df;
      overflow         : hidden;
    }

    .tabs-headers {
      display          : table;
      table-layout     : fixed;
      width            : 100%;
      box-sizing       : border-box;
      list-style       : none;
      background-color : #489cff;
      padding          : 0;
      margin           : 0;
      list-style       : none;
    }

    .tabs-contents {
      position         : relative;
      padding          : 0;
      margin           : 0;
      height           : 200px;
      list-style       : none;
      background-color : #84b3ff;
    }

    .tabs-header {
      display    : table-cell;
      text-align : center;
      font-size  : 40px;
      cursor     : pointer;
    }

    .tabs-header-active_true {
      background-color : #ffbb32 !important;
    }

    .tabs-header:hover {
      background-color : #6dafff;
    }

    .tabs-content {
      position         : absolute;
      width            : 100%;
      height           : 100%;
      left             : 0;
      background-color : #84b3ff;
      padding          : 20px;
      transition       : all 1s;
    }

    .tabs-content-position_left {
      left : -100%;
    }

    .tabs-content-position_right {
      left : 100%;
    }
</style>



<script>
ui.module['tabs'] = function($, scope) {

  var tabs = scope.tabs;

  scope['activeIndex'] = 0;

  $('header').model({active: false});
  $('content').model({position: ''});


  $('header').repeat(tabs);
  $('content').repeat(tabs);

  $('header').turnOn('active', 'i === activeIndex');
  $('content').watch('activeIndex', function(value, i, scope) {
    scope['position'] = (i < value) ? 'left' : (i > value) ? 'right' : '';
  });

  $('header').indexTo('activeIndex');

  $.on('keydown(left, up)', function() { scope.activeIndex-- });
  $.on('keydown(right, down)', function() { scope.activeIndex++ });

};



ui.element['tabs'] = function(scope) {
  var allTabs = this.querySelectorAll('tab');
  scope.tabs = toArray(allTabs).map(function(element) {
    return {
      header : element.getAttribute('caption'),
      content: element.innerHTML
    }
  });
};
</script>




<tabs>
  <tab caption="раз">контент 1</tab>
  <tab caption="два">контент 2</tab>
  <tab caption="три">контент 3</tab>
  <tab caption="четыре">контент 4</tab>
  <tab caption="пять">контент 5</tab>
  <tab caption="шесть">контент 6</tab>
  <tab caption="семь">контент 7</tab>
</tabs>

Последний раз редактировалось iKillMaxmaxmaximus, 29.06.2013 в 15:26.
Ответить с цитированием