У меня есть более простое и элегантное решение, которое не портит классы, стили, непрозрачность и прочее.
Для перетаскиваемого элемента - вы добавляете событие start, которое будет выполняться каждый раз, когда вы пытаетесь переместить элемент куда-нибудь. У вас будет условие, которое не разрешено. Для ходов, которые являются недопустимыми - предотвратите их с помощью e.preventDefault (); как в коде ниже.
$(".disc").draggable({
revert: "invalid",
cursor: "move",
start: function(e, ui){
console.log("element is moving");
if(SOME_CONDITION_FOR_ILLEGAL_MOVE){
console.log("illegal move");
//This will prevent moving the element from it's position
e.preventDefault();
}
}
});
Добро пожаловать:)