1. JavaScript / Говнокод #22296

    −50

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    Resizable.direction = function ( elem, event, pad ) {
    	var res = 8;
    	var pad = pad || 4;
    	var pos = elem.getBoundingClientRect();
    	var top = pos.top;
    	var left = pos.left;
    	var width = elem.clientWidth;
    	var height = elem.clientHeight;
    	var eTop = event.clientY;
    	var eLeft = event.clientX;
    	var isTop = eTop - top < pad;
    	var isRight = left + width - eLeft < pad;
    	var isBottom = top + height - eTop < pad;
    	var isLeft = eLeft - left < pad;
    	if ( isTop ) res = 0;
    	if ( isRight ) res = 1;
    	if ( isBottom ) res = 2;
    	if ( isLeft ) res = 3;
    	if ( isTop && isRight ) res = 4;
    	if ( isRight && isBottom ) res = 5;
    	if ( isBottom && isLeft ) res = 6;
    	if ( isLeft && isTop ) res = 7;
    	return res;
    };

    Плагин Resizable. Определяем направление ресайзинга.

    Просто интересно, а как можно по-другому?

    Запостил: DiphenylOxalate, 07 Февраля 2017

    Комментарии (2) RSS

    • Сама функция ресайзинга:

      if ( proc == 0 || proc == 4 || proc == 7 ) {
      			if ( e.clientY + elem.min[1] > ev.clientY + height ) return;
      			elem.style.top = e.clientY - ev.clientY + pos.top;
      			elem.style.height = height + ev.clientY - e.clientY;
      		}
      		if ( proc == 1 || proc == 4 || proc == 5 ) {
      			elem.style.width = e.clientX - pos.left;
      		}
      		if ( proc == 2 || proc == 5 || proc == 6 ) {
      			elem.style.height = e.clientY - pos.top;
      		}
      		if ( proc == 3 || proc == 6 || proc == 7 ) {
      			if ( e.clientX + elem.min[0] > ev.clientX + width ) return;
      			elem.style.left = e.clientX - ev.clientX + pos.left;
      			elem.style.width = width + ev.clientX - e.clientX;
      		}
      
      		if ( elem.clientHeight < elem.min[1] ) elem.style.height = elem.min[1];
      		if ( elem.clientWidth < elem.min[0] ) elem.style.width = elem.min[0];
      		if ( elem.clientHeight > elem.max[1] ) elem.style.height = elem.max[1];
      		if ( elem.clientWidth > elem.max[0] ) elem.style.width = elem.max[0];
      		if ( e.clientY < pos.bottom - elem.max[1] ) elem.style.top = pos.bottom - elem.max[1];
      		if ( e.clientX < pos.right - elem.max[0] ) elem.style.left = pos.right - elem.max[0];
      Ответить
      • Не знаю как насчёт первой части (что в ОП), но вторую (по proc) можно оформить через switch. Хотя это лично моя точка зрения, а она... ну ты сам понимаешь, не идеальна. :)
        Ответить

    Добавить комментарий