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/04/26 06:56:36 UTC

[14/50] [abbrv] incubator-weex git commit: * [html5] fix scroll to element for window scroll.

* [html5] fix scroll to element for window scroll.


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/7eb86571
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/7eb86571
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/7eb86571

Branch: refs/heads/dev
Commit: 7eb865715bf7b08eadf37f2965f3457dd5a0a176
Parents: 5ce1c11
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Apr 21 12:12:40 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Apr 21 12:12:40 2017 +0800

----------------------------------------------------------------------
 html5/render/vue/modules/dom.js | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7eb86571/html5/render/vue/modules/dom.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/modules/dom.js b/html5/render/vue/modules/dom.js
index 117eaeb..43db8a6 100644
--- a/html5/render/vue/modules/dom.js
+++ b/html5/render/vue/modules/dom.js
@@ -91,20 +91,30 @@ export default {
     }
 
     const scroller = getParentScroller(vnode)
-    const scrollDirection = scroller.scrollDirection || 'vertical'
+    const scrollDirection = scroller && scroller.scrollDirection || 'vertical'
 
-    if (scroller && scroller.$el && vnode.$el) {
+    const isWindow = !scroller
+    const ct = isWindow ? document.body : scroller.$el
+    const el = vnode.$el
+
+    if (ct && el) {
       // if it's a list, then the listVnode.scrollDirection is undefined. just
       // assum it is the default value 'vertical'.
       const dSuffix = ({
         horizontal: 'Left',
         vertical: 'Top'
       })[scrollDirection]
-      let offset = vnode.$el[`offset${dSuffix}`]
+
+      const ctRect = ct.getBoundingClientRect()
+      const elRect = el.getBoundingClientRect()
+
+      const dir = dSuffix.toLowerCase()
+      let offset = el[`scroll${dSuffix}`] + elRect[dir] - ctRect[dir]
+      // let offset = el[`offset${dSuffix}`]
 
       if (options) {
-        offset += Number(options.offset) || 0
-        offset *= weex.config.env.scale /* adapt offset to different screen scales. */
+        offset += options.offset && options.offset * weex.config.env.scale || 0
+        // offset *= weex.config.env.scale /* adapt offset to different screen scales. */
       }
       else if (process.env.NODE_ENV === 'development') {
         console.warn('[Vue Render] The second parameter of "scrollToElement" is required, '
@@ -112,14 +122,14 @@ export default {
       }
 
       if (options && options.animated === false) {
-        return scrollElement.call(scroller.$el, dSuffix, offset)
+        return scrollElement.call(ct, dSuffix, offset)
       }
 
       step({
-        scrollable: scroller.$el,
+        scrollable: ct,
         startTime: now(),
         frame: null,
-        startPosition: scroller.$el[`scroll${dSuffix}`],
+        startPosition: ct[`scroll${dSuffix}`],
         position: offset,
         method: scrollElement,
         dSuffix: dSuffix