scroll.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import BScroll from 'scroll/index'
  2. import { dispatchTouchStart, dispatchTouchMove, dispatchSwipe } from '../../utils/event'
  3. describe('BScroll - core scroll', () => {
  4. let scroll
  5. let scroller
  6. let scrollOptions = {
  7. bindToWrapper: true,
  8. probeType: 3,
  9. deceleration: 0.001
  10. }
  11. beforeEach(() => {
  12. const wrapper = document.createElement('div')
  13. const list = document.createElement('ul')
  14. scroller = document.createElement('div')
  15. scroller.appendChild(list)
  16. wrapper.appendChild(scroller)
  17. document.body.appendChild(wrapper)
  18. wrapper.style.height = '500px'
  19. wrapper.style.overflow = 'hidden'
  20. let listHTML = ''
  21. list.style.margin = '0'
  22. for (let i = 0; i < 100; i++) {
  23. listHTML += `<li>${i}</li>`
  24. }
  25. list.innerHTML = listHTML
  26. scroll = new BScroll(wrapper, scrollOptions)
  27. })
  28. afterEach(() => {
  29. if (scroll) {
  30. document.body.removeChild(scroll.wrapper)
  31. scroll.destroy()
  32. }
  33. })
  34. it('start', () => {
  35. const wrapper = scroll.wrapper
  36. const startHandler = sinon.spy()
  37. scroll.on('beforeScrollStart', startHandler)
  38. dispatchTouchStart(wrapper, {
  39. pageX: 100,
  40. pageY: 50
  41. })
  42. expect(startHandler)
  43. .to.be.calledOnce
  44. expect(scroll.pointX)
  45. .to.equal(100)
  46. expect(scroll.pointY)
  47. .to.equal(50)
  48. })
  49. it('move', () => {
  50. const wrapper = scroll.wrapper
  51. const startHandler = sinon.spy()
  52. const scrollHandler = sinon.spy()
  53. scroll.on('scrollStart', startHandler)
  54. scroll.on('scroll', scrollHandler)
  55. dispatchTouchStart(wrapper, {
  56. pageX: 100,
  57. pageY: 100
  58. })
  59. dispatchTouchMove(wrapper, {
  60. pageX: 100,
  61. pageY: 50
  62. })
  63. expect(startHandler)
  64. .to.be.calledOnce
  65. expect(scrollHandler)
  66. .to.be.calledOnce
  67. })
  68. it('end', (done) => {
  69. const wrapper = scroll.wrapper
  70. const endHandler = sinon.spy()
  71. scroll.on('touchEnd', endHandler)
  72. scroll.on('scrollEnd', () => {
  73. done()
  74. })
  75. dispatchSwipe(wrapper, [
  76. {
  77. pageX: 100,
  78. pageY: 100
  79. },
  80. {
  81. pageX: 100,
  82. pageY: 80
  83. }
  84. ], 100, () => {
  85. expect(endHandler)
  86. .to.be.calledOnce
  87. })
  88. expect(scroll.x)
  89. .to.equal(0)
  90. expect(scroll.y)
  91. .to.equal(0)
  92. })
  93. it('scrollStop', (done) => {
  94. const endHandler = sinon.spy()
  95. scroll.on('scrollEnd', endHandler)
  96. scroll.scrollToElement(scroller, 100000, 0, 500)
  97. setTimeout(() => {
  98. scroll.stop()
  99. expect(endHandler)
  100. .to.be.calledOnce
  101. done()
  102. }, 5000)
  103. })
  104. it('scrollToElement', () => {
  105. scroll.scrollToElement(scroller, 1000, 0, 500)
  106. expect(scroll.y)
  107. .to.equal(-500)
  108. scroll.scrollToElement(scroller, 1000, 0, 400)
  109. expect(scroll.y)
  110. .to.equal(-400)
  111. })
  112. it('scrollBy', () => {
  113. scroll.scrollBy(0, -300, 1000)
  114. expect(scroll.y)
  115. .to.equal(-300)
  116. scroll.scrollBy(0, -200, 1000)
  117. expect(scroll.y)
  118. .to.equal(-500)
  119. })
  120. it('resize', (done) => {
  121. const refreshHandle = sinon.spy()
  122. scroll.on('refresh', refreshHandle)
  123. if (document.createEvent) {
  124. var event = document.createEvent('HTMLEvents')
  125. event.initEvent('resize', true, true)
  126. window.dispatchEvent(event)
  127. } else if (document.createEventObject) {
  128. window.fireEvent('onresize')
  129. }
  130. setTimeout(() => {
  131. expect(refreshHandle)
  132. .to.be.called
  133. done()
  134. }, 5000)
  135. })
  136. })