topTab.directive.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. angular.module('kityminderEditor')
  2. .directive('topTab', function() {
  3. return {
  4. restrict: 'A',
  5. templateUrl: 'ui/directive/topTab/topTab.html',
  6. scope: {
  7. minder: '=topTab',
  8. editor: '='
  9. },
  10. link: function(scope) {
  11. /*
  12. *
  13. * 用户选择一个新的选项卡会执行 setCurTab 和 foldTopTab 两个函数
  14. * 用户点击原来的选项卡会执行 foldTopTop 一个函数
  15. *
  16. * 也就是每次选择新的选项卡都会执行 setCurTab,初始化的时候也会执行 setCurTab 函数
  17. * 因此用 executedCurTab 记录是否已经执行了 setCurTab 函数
  18. * 用 isInit 记录是否是初始化的状态,在任意一个函数时候 isInit 设置为 false
  19. * 用 isOpen 记录是否打开了 topTab
  20. *
  21. * 因此用到了三个 mutex
  22. * */
  23. var executedCurTab = false;
  24. var isInit = true;
  25. var isOpen = true;
  26. scope.setCurTab = function(tabName) {
  27. setTimeout(function() {
  28. //console.log('set cur tab to : ' + tabName);
  29. executedCurTab = true;
  30. //isOpen = false;
  31. if (tabName != 'idea') {
  32. isInit = false;
  33. }
  34. });
  35. };
  36. scope.toggleTopTab = function() {
  37. setTimeout(function() {
  38. if(!executedCurTab || isInit) {
  39. isInit = false;
  40. isOpen ? closeTopTab(): openTopTab();
  41. isOpen = !isOpen;
  42. }
  43. executedCurTab = false;
  44. });
  45. };
  46. function closeTopTab() {
  47. var $tabContent = $('.tab-content');
  48. var $minderEditor = $('.minder-editor');
  49. $tabContent.animate({
  50. height: 0,
  51. display: 'none'
  52. });
  53. $minderEditor.animate({
  54. top: '32px'
  55. });
  56. }
  57. function openTopTab() {
  58. var $tabContent = $('.tab-content');
  59. var $minderEditor = $('.minder-editor');
  60. $tabContent.animate({
  61. height: '60px',
  62. display: 'block'
  63. });
  64. $minderEditor.animate({
  65. top: '92px'
  66. });
  67. }
  68. }
  69. }
  70. });