diff --git a/docs/examples/picker.md b/docs/examples/picker.md index d9c84223b..f4d8959f3 100644 --- a/docs/examples/picker.md +++ b/docs/examples/picker.md @@ -1,7 +1,29 @@ + + ## Picker组件 模仿iOS中的`UIPickerView`。 +### 基础用法 + +:::demo 基础用法 +```html + +``` +::: + ### API | 参数 | 说明 | 类型 | 默认值 | 可选值 | diff --git a/package.json b/package.json index 2090aa0d9..f10b62000 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,6 @@ "rimraf": "^2.5.4", "run-sequence": "^1.2.2", "saladcss-bem": "^0.0.1", - "sass-loader": "^3.2.3", "style-loader": "^0.13.1", "theaterjs": "^3.0.0", "transliteration": "^1.1.11", diff --git a/packages/picker/src/draggable.js b/packages/picker/src/draggable.js new file mode 100644 index 000000000..4f524c986 --- /dev/null +++ b/packages/picker/src/draggable.js @@ -0,0 +1,51 @@ +import Vue from 'vue'; + +let isDragging = false; + +const supportTouch = !Vue.prototype.$isServer && 'ontouchstart' in window; + +export default function(element, options) { + const moveFn = function(event) { + if (options.drag) { + options.drag(supportTouch ? event.changedTouches[0] || event.touches[0] : event); + } + }; + + const endFn = function(event) { + if (!supportTouch) { + document.removeEventListener('mousemove', moveFn); + document.removeEventListener('mouseup', endFn); + } + document.onselectstart = null; + document.ondragstart = null; + + isDragging = false; + + if (options.end) { + options.end(supportTouch ? event.changedTouches[0] || event.touches[0] : event); + } + }; + + element.addEventListener(supportTouch ? 'touchstart' : 'mousedown', function(event) { + if (isDragging) return; + document.onselectstart = function() { return false; }; + document.ondragstart = function() { return false; }; + + if (!supportTouch) { + document.addEventListener('mousemove', moveFn); + document.addEventListener('mouseup', endFn); + } + isDragging = true; + + if (options.start) { + event.preventDefault(); + options.start(supportTouch ? event.changedTouches[0] || event.touches[0] : event); + } + }); + + if (supportTouch) { + element.addEventListener('touchmove', moveFn); + element.addEventListener('touchend', endFn); + element.addEventListener('touchcancel', endFn); + } +}; diff --git a/packages/picker/src/picker-column.vue b/packages/picker/src/picker-column.vue index b07316837..f0ab04053 100644 --- a/packages/picker/src/picker-column.vue +++ b/packages/picker/src/picker-column.vue @@ -1,14 +1,21 @@ diff --git a/packages/picker/src/picker.vue b/packages/picker/src/picker.vue index 513e33c8b..90e2d6d7a 100644 --- a/packages/picker/src/picker.vue +++ b/packages/picker/src/picker.vue @@ -1,10 +1,10 @@