亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

不知道為什么使用鏈式調用就報錯,第33~34行

http://img1.sycdn.imooc.com//594be41700011e3511160446.jpg

使用鏈式調用就報錯,說 _bindContScroll 不是函數,不用的話運行一切正常。

完整代碼:

(function(win,?doc,?$){
	'use?strict';
	//?構造函數
	function?CusScrollBar(options)?{
		this._init(options);
	}

	$.extend(CusScrollBar.prototype,?{
		_init?:?function(options)?{
			let?self?=?this;
			self.options?=?{
				scrollDir?????:?"y",
				contSelector??:?"",
				barSelector???:?"",
				sliderSelector:?""
			};
			$.extend(true,?self.options,?options?||?{});

			self._initDomEvent();

			return?self;
		},
		//?
		_initDomEvent?:?function()?{
			let?opts?????=?this.options;
			this.$cont???=?$(opts.contSelector);
			this.$slider?=?$(opts.sliderSelector);
			this.$bar????=?opts.barSelector???$(opts.barSelector)?:?self.$slider.parent();
			this.$doc????=?$(doc);
????????????????????????
????????????????????????//?就是這里報錯
			this._initSilderDragEvent()
			this._bindContScroll();
		},
		//?
		_initSilderDragEvent?:?function()?{
			let?slider?=?this.$slider;
			let?sliderEl?=?slider[0];

			if?(sliderEl)?{
				let?self?=?this;
				let?doc?=?self.$doc;
				let?dragStartPagePosition;
				let?dragStartScrollPosition;
				let?dragContBarRate;

				function?mousemoveHandler(e)?{
					e.preventDefault();
					console.log('mousemove')
					if?(dragStartPagePosition?==?null)?{
						return;
					}
					self.scrollTo(dragStartScrollPosition?+?(e.pageY?-?dragStartPagePosition)?*?dragContBarRate);
				};

				slider.on('mousedown',?function(e)?{
					e.preventDefault();
					console.log('mousedown')
					dragStartPagePosition?=?e.pageY;
					dragStartScrollPosition?=?self.$cont[0].scrollTop;
					dragContBarRate?=?self.getMaxScrollPosition()?/?self.getMaxSliderPosition();
					console.log(dragContBarRate)
					//?命名空間
					doc.on('mousemove.nnHoney',?mousemoveHandler).on('mouseup.nn',?function(event)?{
						event.preventDefault();
						console.log('mouseup')
						//?doc.off("mousemove?mouseup");
						doc.off(".nn");
					});;
				});
			}
			return?self;
		},
		getMaxScrollPosition?:?function()?{
			let?self?=?this;
			//?內容可以滾動的高度
			//?self.$cont.height()?內容可視區域的高度(文章未充滿頁面的情況)
			//?self.$cont[0].scrollHeight?內容完整高度(文章超出頁面包括隱藏部分)
			return?Math.max(self.$cont.height(),?self.$cont[0].scrollHeight)?-?self.$cont.height();
		},
		getMaxSliderPosition?:?function()?{
			let?self?=?this;
			return?self.$bar.height()?-?self.$slider.height();
		},
		scrollTo?:?function(postionVal)?{
			let?self?=?this;
			self.$cont.scrollTop(postionVal)
		},
		_bindContScroll?:?function()?{
			let?self?=?this;
			self.$cont.on("scroll",?function(e)?{
				e.preventDefault();
				let?sliderEl?=?self.$slider?&&?self.$slider[0];
				if?(sliderEl)?{
					sliderEl.style.top?=?self.getSliderPosition()?+?'px';
				}
			});
			return?self;
		},
		getSliderPosition?:?function()?{
			let?self?=?this;
			let?maxSliderPosition?=?self.getMaxSliderPosition();
			return?Math.min(maxSliderPosition,?maxSliderPosition?*?self.$cont[0].scrollTop?/
????????????????self.getMaxScrollPosition());
		}

	});
	

	win.CusScrollBar?=?CusScrollBar;

})(window,?document,?jQuery);


正在回答

1 回答

自己排查出原因了。

排查過程,把_bindContScroll函數內的內容都屏蔽,只返回self,還是報錯,說明跟_bindContScroll函數沒關系。

那問題只可能出在前面,在 this._initSilderDragEvent() 函數中找,發現沒有在函數的一開始就將this交給self,而是在函數中間將this交給self,因作用域的原因導致這個操作的效果打了折扣,最后return了一個錯誤的self,導致對象本身的屬性和函數傳遞不暢,以至于爆出_bindContScroll不是函數的錯誤。

另外,給老師提個意見,本身后半課程講的就比較粗糙,課程頁面切換有加了花里胡哨的效果,我看的時候更眼花繚亂了,希望老師以后的課程改進??傊?,還是感謝老師的。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

不知道為什么使用鏈式調用就報錯,第33~34行

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號