It sounds like it might be pretty much the worst case scenario, where you have to use the brute force, frame-by-frame method to find the trigger event. This is a simple example where the expression needs to find when the slider has reached its ID value (which is 10 in this example) and will scale up, hold, and scale down from that point:
slider = thisComp.layer("Controls").effect("Slider Control")("Slider");
myID = 10;
scaleMult = 1.1;
scaleUpTime = 1.0;
holdTime = 1.0;
scaleDnTime = 1.0;
if (slider.value >= myID){
t = time;
while (slider.valueAtTime(t) >= myID){
t -= thisComp.frameDuration;
}
deltaT = time - t + thisComp.frameDuration;
if (deltaT > scaleUpTime + holdTime + scaleDnTime){
value;
}else if (deltaT > scaleUpTime + holdTime){
linear(deltaT,scaleUpTime + holdTime, scaleUpTime + holdTime + scaleDnTime,value*scaleMult,value);
}else if (deltaT > scaleUpTime){
value*scaleMult;
}else{
linear(deltaT,0,scaleUpTime,value,value*scaleMult);
}
}else
value
It assumes that the slider value always increases. The longer your comp is, the worse the performance will get. Hopefully this will get you started.