1. done with public functions (API)
2. need to add throttle
3. doesn't work for multiple elements