window.all is undefined的原因是什么,是因为transition的js吗?

window.all is undefined的原因是什么,是因为transition的js吗?

/第一次简化

(function($){

var transition = window.all.transition;


   function init($ele, hiddenCallback) { //元素初始化  


       if ($ele.is(':hidden')) {

           $ele.data('status', 'hidden');

       }

       if (typeof hiddenCallback === 'function') {

           hiddenCallback();

           // $ele.addClass('fadeOut');

       } else {

           $ele.data('status', 'shown');

       }

   }

   

   

   function show($ele, callback) { //show公共部分

       if ($ele.data('status') === 'show') return;

       if ($ele.data('status') === 'shown') return;

       $ele.data('status', 'show').trigger('show');

       callback();

   }

   

   function hide($ele, callback) { //hide公共部分

       if ($ele.data('status') === 'hide') return;

       if ($ele.data('status') === 'hidden') return;

       $ele.data('status', 'hide');

       callback();

   }

   //1、显示与隐藏(无动画版)

   var silent = {

       init: init,

       show: function (ele) {

           var $ele = $(ele);

           show($ele, function () {

               $ele.show();

               $ele.data('status', 'shown');

               $ele.trigger('shown');

           })

       },

       hide: function (ele) {

           var $ele = $(ele);

           hide($ele, function () { //这里的function为回调函数,写与公共部分不一样的

               $ele.hide();

               $ele.data('status', 'hidden').trigger('hidden');

           })

       }

   };

   // //封装css中的动画

var css = { //将css中的样式方法相同的进行封装

   _init: function (ele, className) { //css方法下公用的初始状态

       var $ele = $(ele);

       $ele.addClass('transition');

       init($ele, function () { //这里的function为回调函数

           $ele.addClass(className);

       });

   },

   _show: function (ele, className) {

       var $ele = $(ele);

       show($ele, function () { //这里的function为回调函数


           $ele.off('transitionend').one('transitionend', function () {

               $ele.data('status', 'shown');

               $ele.trigger('shown');

           });

           $ele.show();

           setTimeout(function () {

               $ele.removeClass(className);

           }, 200);

       })

   },

   _hide: function (ele, className) {

       var $ele = $(ele);

       hide($ele, function () { //这里的function为回调函数

           $ele.off('transitionend').one('transitionend', function () {

               $ele.hide();

               $ele.data('status', 'hidden');

               $ele.trigger('hidden');

           })

           $ele.addClass(className);


       })

   },

   //a、fade版

   fade: {

       init: function ($ele) {

           css._init($ele, 'fadeOut');

       },

       show: function (ele) {

           var $ele = $(ele);

           css._show($ele, 'fadeOut'); //这里的function为回调函数      

       },

       hide: function (ele) {

           var $ele = $(ele);

           css._hide($ele, 'fadeOut');


       }

   },

   //b、上下卷帘版

   // 上下卷帘通过改变垂直高度来实现动画

   slideUpDown: {

       init: function ($ele) {

           $ele.height($ele.height()); //元素本身没有高度,是内容撑开的,在初始化时就要计算元素的高度即使时隐藏的

           css._init($ele, 'sliderUpDownCollapse');

       },

       show: function (ele) {

           var $ele = $(ele);

           css._show($ele, 'sliderUpDownCollapse');

       },

       hide: function (ele) {

           var $ele = $(ele);

           css._hide($ele, 'sliderUpDownCollapse');

       }

   },

   slideLeftRight: {

       init: function ($ele) {

           $ele.width($ele.width()); //元素本身没有高度,是内容撑开的,在初始化时就要计算元素的高度即使时隐藏的

           css._init($ele, 'slideLeftRightCollapse');

       },

       show: function (ele) {

           var $ele = $(ele);

           css._show($ele, 'slideLeftRightCollapse');

       },

       hide: function (ele) {

           var $ele = $(ele);

           css._hide($ele, 'slideLeftRightCollapse');

       }

   },

   fadeslideUpDown: {

       init: function ($ele) {

           $ele.height($ele.height()); //元素本身没有高度,是内容撑开的,在初始化时就要计算元素的高度即使时隐藏的

           css._init($ele, 'fadeOut slideUpDownCollapse');

       },

       show: function (ele) {

           var $ele = $(ele);

           css._show($ele, 'fadeOut slideUpDownCollapse');

       },

       hide: function (ele) {

           var $ele = $(ele);

           css._hide($ele, 'fadeOut slideUpDownCollapse');

       }

   },


   fadeslideLeftRight: {

       init: function ($ele) {

           $ele.width($ele.width()); //元素本身没有高度,是内容撑开的,在初始化时就要计算元素的高度即使时隐藏的

           css._init($ele, 'fadeOut slideLeftRightCollapse');

       },

       show: function (ele) {

           var $ele = $(ele);

           css._show($ele, 'fadeOut slideLeftRightCollapse');

       },

       hide: function (ele) {

           var $ele = $(ele);

           css._hide($ele, 'fadeOut slideLeftRightCollapse');

       }

   }

};

//3、js方式

// a、淡入淡出fade

var js = { //init\show\hide的判断之前已经封装好了,不同的回调函数调用就行

   _init: function ($ele, hiddenCallback) { //公共初始状态

       $ele.removeClass('transition'); //如果在HTML标签中设置css动画样式,js就不能政策执行了

       init($ele, hiddenCallback);

   },

   _show: function ($ele, mode) { //公共show

       show($ele, function () { //回调函数

           $ele.stop()[mode](function () { //这里的stop相当于css方法中的off

               $ele.data('status', 'shown').trigger('shown');

           });


       })


   },

   _hide: function ($ele, mode) { //公共hide

       hide($ele, function () { //回调函数

           $ele.stop()[mode](function () {

               $ele.data('status', 'hidden').trigger('hidden');

           })


       })

   },

   fade: {

       init: function ($ele) {

           js._init($ele);

       },

       show: function ($ele) {

           js._show($ele, 'fadeIn');

       },

       hide: function ($ele) {

           js._hide($ele, 'fadeOut') //回调函数    

       }

   },


  // b、 上下卷帘slideUpDown

   slideUpDown: {

       init: function ($ele) {

           js._init($ele);

       },

       show: function ($ele) {

           js._show($ele, 'slideDown');


       },

       hide: function ($ele) {

           js._hide($ele, 'slideUp');

       }

   },

   slideLeftRight: {//封装后的

       init: function ($ele) {

           //用一个对象保存css中的属性

           js._customInit($ele, {

               'width': 0,

               'padding-left': 0,

               'padding-right': 0

           })


       },

   show: function ($ele) {

       js._customShow($ele);

   },

   hide: function ($ele) {

       js._customHide($ele, {


           'width': 0,

           'padding-left': 0,

           'padding-bottom': 0

       });

   }

},  

fadeSlideUpDown: { //封装后的代码

   init: function ($ele) {

       js._customInit($ele, {

           'opacity': 0,

           'height': 0,

           'padding-left': 0,

           'padding-right': 0

       })

       //用一个对象保存css中的属性


   },

   show: function ($ele) {

       js._customShow($ele);

   },

   hide: function ($ele) {

       js._customHide($ele, {

           'height': 0,

           'opacity': 0,

           'padding-top': 0,

           'padding-down': 0

       });

   },

},

// // e、fades+lideLeftRight

fadeSlideLeftRight: { //封装的

   init: function ($ele) {

       js._customInit($ele, {

           'opacity': 0,

           'width': 0,

           'padding-left': 0,

           'padding-right': 0

       })

   },

   show: function ($ele) {

       js._customShow($ele);

   },

   hide: function ($ele) {

       js._customHide($ele, {

           'width': 0,

           'opacity': 0,

           'padding-top': 0,

           'padding-down': 0

       });

   },

},



//jQuery中没有的样式的公共的函数封装

_customInit : function ($ele, options) {

   var styles = {};

   for (var p in options) {

       styles[p] = $ele.css(p);

       $ele.data('styles', styles); //data自定义style,将上面定义的styles传给定义的styles

     };

   js._init($ele, function () {

           $ele.css(options);

       })

},

_customShow : function ($ele, styles) {

   show($ele, function () { //回调最外层公共的show

       var styles = $ele.data('styles');

       $ele.show();

       $ele.stop().animate(styles, function () { //动画完毕后的状态

           $ele.data('status', 'shown').trigger('shown');

       });

   })

},

_customHide : function ($ele, options) {

   hide($ele, function () {

       $ele.stop().animate(options, function () {

           $ele.data('status', 'hideen').trigger('hidden');

       });

   });


}

};

   var defaults={

       css:false,

       js:false,

       animation:'fade'

   }

   function showHide($ele,option){

        var mode = null;//定义一个变量mode,接收是哪一种方式

       //外部传入得到的options覆盖defaults,放入一个空对象

       var options = $.extend({},defaults,options);

       if(options.css && transition.isSupport){//如果传入的css3或者支持transition

  //当外部的参数(样式名称option)传递错误,用||要进行容错处理(如果传错了就用defaults下的)

           mode = css[options.animation]||css3[defaults.animation]

   

       }else if(options.js){//js动画

           mode = js[options.animation]||js[defaults.animation]

   

       }else{//无动画

 mode = silent;

       }

       mode.init($ele);

       return{//统一返回

show:mode.show,

hide:mode.hide

//用proxy可以让外部调用的时候不用在showHide.show($box)里传入box;

//show:$proxy(mode,show,this,$ele),

//hide:$proxy(mode,hide,this,$ele)

       };

   }


   //调用将局部变全局


window.all = window.all||{};

window.all.showHide = showHide;



//用插件的方式来调用

// $.fn.extend({

//     showHide:function(option){

//         return this.each(function(){

//             var $this=$(this),

//             options = $extend({},defaults,typeof option === object && option),

//             mode = $this.data('showHide');

//             if(!mode){

//                 $this.data('showHide',mode = showHide($this,option));

//             }

//             if(typeof mode[option] === 'function'){

//                 mode[option]();

//             }

//         })

//     }

// })


   })(jQuery);







//外部调用(组件化调用)

var $box = $('#box');

window.all.showHide($box,{

   css:true,

   animation:'fade'

});

$('#btn-show').on('click', function () {

   showHide.show($box);

});

$('#btn-hide').on('click', function () {

   showHide.hide($box);

});


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕夭夭 2019-08-09 15:26:48

你好同学,老师这边把transition.js中的mt修改成all,没有出现window.all未定义的报错,请同学把自己改过的transition.js粘贴一下,另外如果还有其他的代码建议都粘贴上来,以便老师准确高效的为你查找问题。

祝学习愉快!

好帮手慕夭夭 2019-08-09 10:59:12

你好同学,如果是使用的视频中的transition.js ,那么就是代码中写错,如下:

transition.js 中如下定义的属性是mt

http://img1.sycdn.imooc.com//climg/5d4cdb990001cdf906360438.jpg

而同学的代码中使用属性是all ,而这个all属性没有定义肯定会报错。把代码中所有使用all的地方都改成mt哦

http://img1.sycdn.imooc.com//climg/5d4cdbfd000190b805910096.jpg

另外,还有几个被注释的代码,不知道这一块同学是不是要重新写,但是存在几个问题,可以注意一下:

http://img1.sycdn.imooc.com//climg/5d4ce0f80001fae408980266.jpg

http://img1.sycdn.imooc.com//climg/5d4ce11a00010e4106510297.jpg

因为代码同学可能还没有改完,建议同学在看一下视频,继续往下写,如果还有问题,可以继续提问哦。以便老师更准确的帮助你指导。

祝学习愉快,望采纳。

  • 提问者 慕妹2075046 #1
    在transition.js中就时用all定义的,所以都用的all 因为我还不知道proxy的方法,插件的方法调用也没有搞清楚,所以我用最原始的调用方法,但是报错window.all未定义
    2019-08-09 11:19:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师