ボックスマウスの移動方向の判断

3746 ワード

コードのjqの参照を変更する必要があります



	
		
		          
		
	

	
		
1
2
3
4
// var MouseDirection = function(element, opts) { var $element = $(element); //enter leave opts = $.extend({}, { enter: $.noop, leave: $.noop }, opts || {}); var dirs = ['top', 'right', 'bottom', 'left']; var calculate = function(element, e) { /* */ // var x1, y1, x4, y4, x0, y0; // var k; // getBoundingClientRect , var rect = element.getBoundingClientRect(); if(!rect.width) { rect.width = rect.right - rect.left; } if(!rect.height) { rect.height = rect.bottom - rect.top; } // y , (0,0), x1 = rect.left; y1 = -rect.top; x4 = rect.left + rect.width; y4 = -(rect.top + rect.height); x0 = rect.left + rect.width / 2; y0 = -(rect.top + rect.height / 2); // , if(Math.abs(x1 - x4) < 0.0001) return 4; // k = (y1 - y4) / (x1 - x4); var range = [k, -k]; // var x, y; x = e.clientX; y = -e.clientY; // var kk; kk = (y - y0) / (x - x0); // range , if(isFinite(kk) && range[0] < kk && kk < range[1]) { // x x0 return x > x0 ? 1 : 3; } else { // y y0 return y > y0 ? 0 : 2; } }; $element.on('mouseenter', function(e) { var r = calculate(this, e); opts.enter($element, dirs[r]); }).on('mouseleave', function(e) { var r = calculate(this, e); opts.leave($element, dirs[r]); }); }; var DIR_POS = { left: { top: '0', left: '-100%' }, right: { top: '0', left: '100%' }, bottom: { top: '100%', left: '0' }, top: { top: '-100%', left: '0' } }; $('.box').each(function() { new MouseDirection(this, { enter: function($element, dir) { // .trans , var $content = $element.find('.content').removeClass('trans'); // $content.css(DIR_POS[dir]); //reflow $content[0].offsetWidth; // $content.addClass('trans'); // $content.css({ left: '0', top: '0' }); }, leave: function($element, dir) { $element.find('.content').css(DIR_POS[dir]); } }); });