#jquery #properties #prototype #transition
#jquery #свойства #прототип #переход
Вопрос:
Я создал следующую функцию (для использования с гениальным плагином jquery-transit от Rico StCruz):
$.fn.translateLeftTop = function( left, top, duration, easing ) {
var $this = $(this);
var currentLeftPx = parseInt( $this.css('left') );
var currentTopPx = parseInt( $this.css('top') );
var parentWidth = $this.parent().width();
var parentHeight = $this.parent().height();
// final left layout destination in px
var finalLeftPx = parentWidth/100 * left;
var finalTopPx = parentHeight/100 * top;
// actual distances to final left/top layout destination in px
var distanceLeftPx = currentLeftPx - finalLeftPx;
var distanceTopPx = currentTopPx - finalTopPx;
$this.transition( { x: -distanceLeftPx, y: -distanceTopPx }, duration, easing, function() {
$this.stop(true).css( { left: left '%', top: top '%', x: 0, y: 0 } );
} );
}
Вместо этого я бы с удовольствием использовал его следующим образом:
$("#element").translateLeftTop( { left: '5%', top: '5%' }, 500, 'easeOutSine' )
и держите его открытым для обоих значений или только одного по коду, так что также
$("#element").translateLeftTop( { left: '5%' }, 500, 'easeOutSine' )
или
$("#element").translateLeftTop( { top: '5%' }, 500, 'easeOutSine' )
было бы полезно.
Ответ №1:
Ваша функция принимает 3 параметра, а не 4, как вы ее описали.
В настоящее время у вас function( left, top, duration, easing ){...
есть, но вместо этого вы хотите иметь function( options, duration, easing )
where options
— это объект.
Затем вы можете получить доступ к свойствам top
left
или чему-либо еще, что вы хотите от options
объекта. Однако перед его использованием необходимо проверить, существует ли это свойство. Например, чтобы проверить top
, существует ли свойство, прежде чем использовать его в функции, вы можете сделать:
if (options.hasOwnProperty('top')) {
// do something with options.top
}
Ответ №2:
Спасибо! Я тоже об этом думал. Но в этом случае мне пришлось бы сделать 3 полные версии последней части кода ($this.transition …), Одну с 2 свойствами параметров, одну только с первым и одну только со вторым. Я боюсь, что это станет ужасным фрагментом кода. 🙁
Кто-нибудь знает, как, например, jquery решает такого рода функции, например, с помощью их функции .animate() . Я не могу себе представить, что в них есть бесконечные случаи if else, потому что animate() принимает намного больше параметров, и предоставление таким образом всех комбинаций было бы практически невозможно. Вы понимаете, что я имею в виду?