You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by so...@apache.org on 2017/03/31 07:28:44 UTC
[09/50] [abbrv] incubator-weex git commit: * [html5] support scroll
event & offset-accuracy attribute.
* [html5] support scroll event & offset-accuracy attribute.
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/f50fba86
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/f50fba86
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/f50fba86
Branch: refs/heads/0.12-dev
Commit: f50fba8647c8bb6ac522b1a4569a2a2269da1953
Parents: 36a71b1
Author: MrRaindrop <te...@gmail.com>
Authored: Thu Mar 23 11:37:05 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Thu Mar 23 11:37:05 2017 +0800
----------------------------------------------------------------------
html5/render/vue/mixins/scrollable.js | 44 +++++++++++++++++++++++++++++-
1 file changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f50fba86/html5/render/vue/mixins/scrollable.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/scrollable.js b/html5/render/vue/mixins/scrollable.js
index c83b82f..a55273b 100644
--- a/html5/render/vue/mixins/scrollable.js
+++ b/html5/render/vue/mixins/scrollable.js
@@ -1,6 +1,47 @@
-import { getThrottleLazyload } from '../utils'
+import { getThrottleLazyload, throttle } from '../utils'
+
+let throttleScroll
+function getThrottledScroll (context) {
+ if (!throttleScroll) {
+ const wrapper = context.$refs.wrapper
+ const inner = context.$refs.inner
+ let preOffset = (context.scrollDirection === 'horizontal'
+ ? wrapper.scrollLeft
+ : wrapper.scrollTop)
+ || 0
+ throttleScroll = throttle(function (evt) {
+ const offset = context.scrollDirection === 'horizontal'
+ ? wrapper.scrollLeft
+ : wrapper.scrollTop
+ const indent = parseInt(context.offsetAccuracy)
+ function triggerScroll () {
+ const rect = inner.getBoundingClientRect()
+ evt.contentSize = { width: rect.width, height: rect.height }
+ evt.contentOffset = {
+ x: wrapper.scrollLeft,
+ y: wrapper.scrollTop
+ }
+ context.$emit('scroll', evt)
+ }
+ if (indent
+ && !isNaN(indent)
+ && indent > 0
+ && Math.abs(offset - preOffset) >= indent) {
+ triggerScroll()
+ preOffset = offset
+ }
+ else if (!indent || isNaN(indent) || indent <= 0) {
+ triggerScroll()
+ }
+ }, 16, true)
+ }
+ return throttleScroll
+}
export default {
+ props: {
+ offsetAccuracy: [Number, String]
+ },
methods: {
updateLayout () {
const wrapper = this.$refs.wrapper
@@ -13,6 +54,7 @@ export default {
handleScroll (event) {
getThrottleLazyload(25, this.$el, 'scroll')()
+ getThrottledScroll(this)(event)
if (this.reachBottom()) {
this.$emit('loadmore', event)
}