Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
f7e45815
U
uni-app
项目概览
DCloud
/
uni-app
3 个月 前同步成功
通知
720
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
f7e45815
编写于
8月 08, 2019
作者:
W
wandali2019
提交者:
GitHub
8月 08, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Create swiper.js
上级
4ca97b83
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
222 addition
and
0 deletion
+222
-0
src/platforms/app-plus-nvue/runtime/components/swiper.js
src/platforms/app-plus-nvue/runtime/components/swiper.js
+222
-0
未找到文件。
src/platforms/app-plus-nvue/runtime/components/swiper.js
0 → 100644
浏览文件 @
f7e45815
import
{
emitter
}
from
'
../mixins
'
function
getSwiper
(
weex
)
{
return
{
name
:
'
Swiper
'
,
mixins
:
[
emitter
],
props
:
{
indicatorDots
:
{
type
:
[
Boolean
,
String
],
default
:
false
},
vertical
:
{
type
:
[
Boolean
,
String
],
default
:
false
},
autoplay
:
{
type
:
[
Boolean
,
String
],
default
:
false
},
circular
:
{
type
:
[
Boolean
,
String
],
default
:
false
},
interval
:
{
type
:
[
Number
,
String
],
default
:
5
e3
},
duration
:
{
type
:
[
Number
,
String
],
default
:
500
},
current
:
{
type
:
[
Number
,
String
],
default
:
0
},
indicatorColor
:
{
type
:
String
,
default
:
'
rgba(0,0,0,.3)
'
},
indicatorActiveColor
:
{
type
:
String
,
default
:
'
#000000
'
},
previousMargin
:
{
type
:
String
,
default
:
''
},
nextMargin
:
{
type
:
String
,
default
:
''
},
currentItemId
:
{
type
:
String
,
default
:
''
},
skipHiddenItemLayout
:
{
type
:
[
Boolean
,
String
],
default
:
false
},
displayMultipleItems
:
{
type
:
[
Number
,
String
],
default
:
1
}
},
data
()
{
return
{
currentSync
:
this
.
current
,
currentChangeSource
:
'
autoplay
'
,
touching
:
false
,
touchendTime
:
0
}
},
watch
:
{
current
()
{
this
.
_currentCheck
()
},
currentItemId
()
{
this
.
_currentCheck
()
},
currentSync
()
{
const
source
=
this
.
touching
&&
this
.
currentChangeSource
?
'
touch
'
:
this
.
currentChangeSource
if
(
source
)
{
this
.
$trigger
(
'
change
'
,
this
.
_getDetail
())
}
else
{
this
.
currentChangeSource
=
'
autoplay
'
}
}
},
methods
:
{
onChange
(
event
)
{
this
.
currentSync
=
event
.
detail
.
index
},
onScroll
(
event
)
{
const
offsetXRatio
=
event
.
detail
.
offsetXRatio
if
(
!
this
.
touching
&&
Math
.
abs
(
offsetXRatio
)
===
0
)
{
const
detail
=
this
.
_getDetail
()
if
(
Date
.
now
()
-
this
.
touchendTime
<
this
.
interval
-
1
)
{
detail
.
source
=
'
touch
'
}
this
.
$trigger
(
'
animationfinish
'
,
detail
)
}
},
onTouchmove
()
{
this
.
touching
=
true
},
onTouchend
()
{
this
.
touching
=
false
this
.
touchendTime
=
Date
.
now
()
},
_getDetail
()
{
const
current
=
this
.
currentSync
const
currentItem
=
this
.
items
[
current
]
||
{}
const
currentItemId
=
(
currentItem
.
componentInstance
&&
currentItem
.
componentInstance
.
itemId
)
||
''
const
source
=
this
.
touching
&&
this
.
currentChangeSource
?
'
touch
'
:
this
.
currentChangeSource
return
{
current
,
currentItemId
,
source
}
},
_currentCheck
()
{
let
current
=
-
1
if
(
this
.
currentItemId
)
{
for
(
let
i
=
0
,
items
=
this
.
items
;
i
<
items
.
length
;
i
++
)
{
const
componentInstance
=
items
[
i
].
componentInstance
if
(
componentInstance
&&
componentInstance
.
itemId
===
this
.
currentItemId
)
{
current
=
i
break
}
}
}
if
(
current
<
0
)
{
current
=
Math
.
round
(
this
.
current
)
||
0
}
current
=
current
<
0
?
0
:
current
if
(
this
.
currentSync
!==
current
)
{
this
.
currentChangeSource
=
''
this
.
currentSync
=
current
}
}
},
created
()
{
this
.
items
=
[]
},
mounted
()
{
this
.
_currentCheck
()
},
render
(
createElement
)
{
const
swiperItems
=
[]
const
slots
=
Array
.
isArray
(
this
.
$slots
.
default
)
?
this
.
$slots
.
default
:
[]
slots
.
forEach
(
vnode
=>
{
if
(
vnode
.
componentOptions
&&
vnode
.
componentOptions
.
tag
===
'
swiper-item
'
)
{
swiperItems
.
push
(
vnode
)
}
})
this
.
items
=
swiperItems
const
event
=
{}
const
$listeners
=
this
.
$listeners
if
(
$listeners
.
change
||
$listeners
.
animationfinish
)
{
event
.
panmove
=
this
.
onTouchmove
event
.
panend
=
this
.
onTouchend
}
if
(
$listeners
.
change
)
{
event
.
change
=
this
.
onChange
}
if
(
$listeners
.
animationfinish
)
{
event
.
scroll
=
this
.
onScroll
}
return
createElement
(
'
div
'
,
this
.
_g
({
staticClass
:
[
'
uni-swiper
'
]
},
$listeners
),
[
createElement
(
'
slider
'
,
{
staticClass
:
[
'
uni-swiper-slider
'
],
attrs
:
{
autoPlay
:
this
.
autoplay
,
interval
:
this
.
interval
,
index
:
this
.
currentSync
,
showIndicators
:
this
.
indicatorDots
,
infinite
:
this
.
circular
,
vertical
:
this
.
vertical
},
on
:
event
},
[...
swiperItems
,
createElement
(
'
indicator
'
,
{
staticClass
:
[
'
uni-swiper-dots
'
],
style
:
{
itemColor
:
this
.
indicatorColor
,
itemSelectedColor
:
this
.
indicatorActiveColor
,
itemSize
:
8
,
// 动态创建 indicator 在安卓上有问题,改成透明度控制显示和隐藏
opacity
:
this
.
indicatorDots
?
1
:
0
}
})],
2
)])
},
style
:
{
'
uni-swiper
'
:
{
position
:
'
relative
'
,
height
:
'
150px
'
},
'
uni-swiper-slider
'
:
{
position
:
'
absolute
'
,
left
:
0
,
top
:
0
,
right
:
0
,
bottom
:
0
},
'
uni-swiper-dots
'
:
{
position
:
'
absolute
'
,
left
:
0
,
right
:
0
,
bottom
:
'
10
'
,
height
:
'
10
'
}
}
}
}
export
default
function
init
(
Vue
,
weex
)
{
Vue
.
component
(
'
swiper
'
,
getSwiper
(
weex
))
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录