jd.vue 4.3 KB
Newer Older
T
tank0317 已提交
1 2 3 4 5 6 7
<template>
  <cube-page type="scroll-view" title="Scroll" class="jd">
    <div slot="content" class="scroll-list-wrap">
      <header ref="topHeader"><img src="http://om0jxp12h.bkt.clouddn.com/jd_header2.png"></header>
      <cube-scroll
        ref="scroll"
        :data="[]"
F
fengweiyao 已提交
8
        :scroll-events="['scroll']"
T
tank0317 已提交
9
        :options="options"
T
tank0317 已提交
10 11 12 13 14 15 16 17 18
        @scroll="onScrollHandle"
        @pulling-down="onPullingDown">
        <img src="http://om0jxp12h.bkt.clouddn.com/jd_content.JPG">
        <template slot="pulldown" slot-scope="props">
          <div
              v-if="props.pullDownRefresh"
              class="cube-pulldown-wrapper"
              :style="pullDownStyle">
            <div class="pulldown-content">
19
              <img src="http://om0jxp12h.bkt.clouddn.com/pulldow-img.jpg" @load="onImgLoad">
T
tank0317 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
              <span v-if="props.beforePullDown">{{ pullDownTip }}</span>
              <template v-else>
                <span v-if="props.isPullingDown">正在更新...</span>
                <span v-else>更新成功</span>
              </template>
            </div>
          </div>
        </template>
      </cube-scroll>
      <footer><img src="http://om0jxp12h.bkt.clouddn.com/jd_footer2.png"></footer>
      <transition name="surprise-page">
        <div v-if="triggerSurprise"
          @click="surpriseHandle"
          class="surprise-page">
          <img src="http://om0jxp12h.bkt.clouddn.com/ad_fullpage2.jpg">
        </div>
      </transition>
    </div>
  </cube-page>
</template>

<script type="text/ecmascript-6">
import CubePage from '../../components/cube-page.vue'

export default {
  data() {
    return {
T
tank0317 已提交
47
      options: {
T
tank0317 已提交
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
        pullDownRefresh: {
          threshold: 60,
          stop: 40,
          txt: '更新成功'
        }
      },
      pullDownY: 0,
      pullDownStyle: '',
      opacityStyle: '',
      triggerSurpriseFlag: false,
      triggerSurprise: false
    }
  },
  components: {
    CubePage
  },
  computed: {
    pullDownTip() {
      if (this.pullDownY <= 60) {
        return '下拉刷新...'
      } else if (this.pullDownY <= 90) {
        return '继续下拉有惊喜...'
      } else {
        return '松手得惊喜!'
      }
    },
    headerStyle() {
T
tank0317 已提交
75
      return Math.min(1, Math.max(0, 1 - this.pullDownY / 40))
T
tank0317 已提交
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
    }
  },
  methods: {
    onScrollHandle(pos) {
      this.pullDownY = pos.y
      if (pos.y > 0) {
        this.pullDownStyle = `top:${pos.y}px`
        this.triggerSurpriseFlag = false
        if (this.pullDownY > 90) {
          this.triggerSurpriseFlag = true
        }
      }
      this.$refs.topHeader.style.opacity = this.headerStyle
    },
    onPullingDown() {
      if (this.triggerSurpriseFlag) {
        this.triggerSurprise = true
        this.$refs.scroll.forceUpdate()
        return
      }
      setTimeout(() => {
        this.$refs.scroll.forceUpdate()
      }, 1000)
    },
    surpriseHandle() {
      this.triggerSurpriseFlag = false
      this.triggerSurprise = false
      this.$refs.topHeader.style.opacity = 1
      // go to other page
105 106 107
    },
    onImgLoad() {
      this.$refs.scroll.refresh()
T
tank0317 已提交
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
    }
  }
}
</script>

<style lang="stylus" rel="stylesheet/stylus">
.jd
  .content
    margin: 0 !important
    height: 100%
  .scroll-list-wrap
    position: relative
    height: 100%
    border: 1px solid rgba(0, 0, 0, 0.1)
    border-radius: 5px
    transform: rotate(0deg) // fix 子元素超出边框圆角部分不隐藏的问题
    overflow: hidden
    header
    footer
      position: absolute
      left: 0
      z-index: 32
      line-height: 0
      width: 100%
    header
      top: 0
    footer
      bottom: 0
    img
      width: 100%
      // height: 50px
    .cube-pulldown-wrapper
      transform: translateY(-100%)
      line-height: 0
      .pulldown-content
        width: 100%
        span
          position: absolute
          bottom: 15px
          left: 0
          right: 0
          margin: auto
          width: 200px
          text-align: center
          color: #eee
          font-size: 14px
  .surprise-page
    position absolute
    top: 0
    bottom: 0
    right: 0
    left: 0
    z-index: 33
    line-height: 0
    img 
      height: 100%
      width: 100%
  .surprise-page-enter, .surprise-page-leave-to
    transform: translateY(-100%)
  .surprise-page-enter-active, .surprise-page-leave-active
    transition: transform .3s
</style>