### OnVisibilityChangedAutoplaySample
```kotlin
@Composable
fun OnVisibilityChangedAutoplaySample() {
    @Composable
    fun VideoFeed(feedData: List<Video>) {
        LazyColumn {
            items(feedData) { video ->
                VideoRow(
                    video,
                    Modifier.onVisibilityChanged(minDurationMs = 500, minFractionVisible = 1f) {
                        visible ->
                        if (visible) video.play() else video.pause()
                    },
                )
            }
        }
    }
}
```
### OnVisibilityChangedAutoplayWithViewportSample
```kotlin
@Composable
fun OnVisibilityChangedAutoplayWithViewportSample() {
    @Composable
    fun VideoFeed(feedData: List<Video>) {
        val viewport = remember { LayoutBoundsHolder() }
        LazyColumn(Modifier.layoutBounds(viewport)) {
            items(feedData) { video ->
                VideoRow(
                    video,
                    Modifier.onVisibilityChanged(
                        minDurationMs = 500,
                        minFractionVisible = 1f,
                        viewportBounds = viewport,
                    ) { visible ->
                        if (visible) video.play() else video.pause()
                    },
                )
            }
        }
    }
}
```
### OnVisibilityChangedDurationLoggingSample
```kotlin
@Composable
fun OnVisibilityChangedDurationLoggingSample() {
    @Composable
    fun VideoFeed(feedData: List<Video>, logger: Logger) {
        LazyColumn {
            items(feedData) { video ->
                var startTime by remember { mutableLongStateOf(-1) }
                VideoRow(
                    video,
                    Modifier.onVisibilityChanged(minDurationMs = 500, minFractionVisible = 1f) {
                        visible ->
                        if (visible) {
                            startTime = System.currentTimeMillis()
                        } else if (startTime >= 0) {
                            val durationMs = System.currentTimeMillis() - startTime
                            logger.logImpression(video.id, durationMs)
                            startTime = -1
                        }
                    },
                )
            }
        }
    }
}
```