Visibility#
unicorn:visible
can be added to any element to have it call the specified view method when it scrolls into view.
# visibility.py
from django_unicorn.components import UnicornView
class VisibilityView(UnicornView):
visibility_count = 0
def add_count(self):
self.visibility_count += 1
<!-- visibility.html -->
<div>
<div style="height: 100%">
<span unicorn:visible="add_count">
</div>
</div>
Note
In some cases, the element with the unicorn:visible
attribute will always be in the viewport, so the event will continue to fire and the method will continue to execute. However, this will not happen in the following instances:
the fields of component do not change, so the AJAX request will return a 304 status code
the method explicitly returns
False
Modifiers#
There are a few modifiers for unicorn:visible
and they are able to be chained if necessary.
Debounce#
Similar to the debounce modifier on a model or actions, wait the specified number of milliseconds before calling the specified method.
<!-- debounce-modifier.html -->
<div>
<div style="height: 100%">
<span unicorn:visible.debounce-1000="add_count"></span>
</div>
</div>
Threshold#
The percentage (as an integer) that should be visible before being triggered. For example, 0
means that as soon as 1 pixel of the element is visible it would be fired, 25
would be 25% of the target element is visible, 100
would require 100% of the element to be completely visible.
<!-- threshold-modifier.html -->
<div>
<div style="height: 100%">
<span unicorn:visible.threshold-25="add_count"></span>
</div>
</div>