mirror of
				https://github.com/MarioSpore/Grinch-AP.git
				synced 2025-10-21 20:21:32 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| (function (global, factory) {
 | ||
|   typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :
 | ||
|       typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :
 | ||
|           (factory((global.$ = global.$ || {}, global.$.fn = global.$.fn || {}), global.$));
 | ||
| }(this, (function (exports, $) {
 | ||
|   'use strict';
 | ||
| 
 | ||
|   $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
 | ||
| 
 | ||
| // 参考了(reference):
 | ||
| // debouncing function from John Hann
 | ||
| // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
 | ||
|   function debounce(func, threshold) {
 | ||
|     var timeout;
 | ||
|     return function debounced() {
 | ||
|       var obj = this, args = arguments;
 | ||
| 
 | ||
|       function delayed() {
 | ||
|         // 让调用smartresize的对象执行
 | ||
|         func.apply(obj, args);
 | ||
|         /*
 | ||
|         timeout = null;:这个语句只是单纯将timeout指向null,
 | ||
|         而timeout指向的定时器还存在,
 | ||
|         要想清除定时器(让setTimeout调用的函数不执行)要用clearTimeout(timeout)。
 | ||
|         eg:
 | ||
|         var timeout = setTimeout(function(){
 | ||
|           alert('timeout = null');// 执行
 | ||
|         },1000);
 | ||
|         timeout = null;
 | ||
|         var timeout = setTimeout(function(){
 | ||
|           alert('clearTimeout(timeout)');// 不执行
 | ||
|         },1000);
 | ||
|         clearTimeout(timeout);
 | ||
|         var timeout = setTimeout(function(){
 | ||
|           clearTimeout(timeout);
 | ||
|           alert('clearTimeout(timeout)');// 执行(已经开始执行匿名函数了)
 | ||
|         },1000);
 | ||
|         */
 | ||
|         timeout = null;
 | ||
|       }
 | ||
| 
 | ||
|       // 如果有timeout正在倒计时,则清除当前timeout
 | ||
|       timeout && clearTimeout(timeout);
 | ||
|       timeout = setTimeout(delayed, threshold || 100);
 | ||
|     };
 | ||
|   }
 | ||
| 
 | ||
|   function smartscroll(fn, threshold) {
 | ||
|     return fn ? this.bind('scroll', debounce(fn, threshold)) : this.trigger('smartscroll');
 | ||
|   }
 | ||
| 
 | ||
| //jquery-smartscroll
 | ||
|   $.fn.smartscroll = smartscroll;
 | ||
| 
 | ||
|   function scrollsync(options) {
 | ||
|     var defaluts = {
 | ||
|       x_sync: true,
 | ||
|       y_sync: true,
 | ||
|       use_smartscroll: false,
 | ||
|       smartscroll_delay: 10,
 | ||
|     };
 | ||
| 
 | ||
|     // 使用jQuery.extend 覆盖插件默认参数
 | ||
|     var options = $.extend({}, defaluts, options);
 | ||
|     console.log(options);
 | ||
| 
 | ||
|     var scroll_type = options.use_smartscroll ? 'smartscroll' : 'scroll';
 | ||
|     var $containers = this;
 | ||
| 
 | ||
|     // 滚动后设置scrolling的值,调用set同步滚动条
 | ||
|     var scrolling = {};
 | ||
|     Object.defineProperty(scrolling, 'top', {
 | ||
|       set: function (val) {
 | ||
|         $containers.each(function () {
 | ||
|           $(this).scrollTop(val);
 | ||
|         });
 | ||
|       }
 | ||
|     });
 | ||
|     Object.defineProperty(scrolling, 'left', {
 | ||
|       set: function (val) {
 | ||
|         $containers.each(function () {
 | ||
|           $(this).scrollLeft(val);
 | ||
|         });
 | ||
|       }
 | ||
|     });
 | ||
| 
 | ||
|     $containers.on({
 | ||
|       mouseover: function () {
 | ||
|         if (scroll_type == 'smartscroll') {
 | ||
|           $(this).smartscroll(function () {
 | ||
|             options.x_sync && (scrolling.top = $(this).scrollTop());
 | ||
|             options.y_sync && (scrolling.left = $(this).scrollLeft());
 | ||
|           }, options.smartscroll_delay);
 | ||
|           return;
 | ||
|         }
 | ||
|         $(this).bind('scroll', function () {
 | ||
|           options.x_sync && (scrolling.top = $(this).scrollTop());
 | ||
|           options.y_sync && (scrolling.left = $(this).scrollLeft());
 | ||
|         });
 | ||
|       },
 | ||
|       mouseout: function () {
 | ||
|         $(this).unbind('scroll');
 | ||
|       }
 | ||
|     });
 | ||
| 
 | ||
| 
 | ||
|     return this;
 | ||
|   }
 | ||
| 
 | ||
|   exports.scrollsync = scrollsync;
 | ||
| 
 | ||
|   Object.defineProperty(exports, '__esModule', {value: true});
 | ||
| 
 | ||
| })));
 | 
