npm install -g @wechat-miniprogram/miniprogram-cli
miniprogram init --type custom-component
npm install
npm run dev
默认会在包根目录下生成 miniprogram_dev 目录,src 中的源代码会被构建并生成到 miniprogram_dev/components 目录下。(小程序开发者工具预览效果打开的也是这个目录,这里一定要注意)
<scroll-view class="tab-item" scroll-x scroll-with-animation="true" bindscrolltoupper="toUpper" bindscrolltolower="toLower" id="scroll-view" scroll-left="{
{ scrollLeft }}">
<view class="tab-item-sty">
<button wx:for="{
{typeList}}" wx:key="index" wx:for-index="index" bindtap="onButtonChange" hover-class="hover-btn" data-type="{
{item.type}}" data-deptType='{
{item.deptType}}' id="item-{
{ item.type }}" class="{
{item.select ? 'font-w' : 'font-b'}}">
{
{
item.name}}
</button>
</view>
</scroll-view>
/* 切换 */
.tab-item {
width: calc(100% - 18rpx);
padding: 14rpx 9rpx 26rpx 9rpx;
background: #fff;
}
.tab-item-sty {
display: flex;
align-items: center;
}
.tab-item-sty button {
position: relative;
display: inline-block;
margin: 0 10rpx 0 0;
flex-shrink: 0;
width: auto !important;
height: 52rpx;
min-height: 52rpx !important;
line-height: 52rpx;
border-radius: 30rpx;
/* padding: 0 20rpx; */
padding: 0 50rpx;
}
button::after {
border: none;
}
.tab-item-sty .hover-btn {
font-size: 30rpx;
font-weight: 500;
color: #fff;
background: #e95027;
}
.tab-item-sty .font-w {
font-size: 30rpx;
font-weight: 500;
color: #fff;
background: linear-gradient(to right, #e95027, #db1a1f);
}
.tab-item-sty .font-b {
background: #ffffff;
font-size: 30rpx;
font-weight: 500;
color: #333333;
border: 1rpx solid #DBDBDB;
}
/* 隐藏滚动条 */
::-webkit-scrollbar {
width: 0;
height: 0;
color: transparent;
}
Component({
properties: {
typeList: {
type: Array,
value: [
{
type: '1', name: 'tab1', select: true, deptType: "0" },
{
type: '2', name: 'tab2', select: false, deptType: '1'},
{
type: '3', name: 'tab3', select: false, deptType: '2' },
{
type: '4', name: 'tab4', select: false, deptType: '1'},
{
type: '5', name: 'tab5', select: false, deptType: '2' },
{
type: '6', name: 'tab6', select: false, deptType: '1'},
{
type: '7', name: 'tab7', select: false, deptType: '2' },
{
type: '8', name: 'tab8', select: false, deptType: '1'},
{
type: '9', name: 'tab9', select: false, deptType: '2' }
]
}
},
data: {
scrollLeft: 0
},
methods: {
onButtonChange: function (e) {
const list = this.data.typeList
let that = this;
list.forEach(item => {
if (item.type === e.currentTarget.dataset.type) {
item.select = true
} else {
item.select = false
}
})
that.setData({
typeList: list,
})
var query = wx.createSelectorQuery().in(that);//创建节点查询器
query.select('#item-' + e.currentTarget.dataset.type).boundingClientRect();//选择id='#item-' + selectedId的节点,获取节点位置信息的查询请求
query.select('#scroll-view').boundingClientRect();//获取滑块的位置信息
query.select('#scroll-view').scrollOffset();//获取页面滑动位置的查询请求
query.exec(function (res) {
// console.log(res[2].scrollLeft + res[0].left + res[0].width / 2 - res[1].width / 2)
that.setData({
scrollLeft: res[2].scrollLeft + res[0].left + res[0].width / 2 - res[1].width / 2
});
});
this.triggerEvent('chooseType', e.currentTarget)
}
}
})
{
"component": true,
"usingComponents": {
}
}
<my-tab-item>my-tab-item>
在开发者工具就可以正常使用了
src下面的组件正常情况下都会被打报到miniprogram_dev下的components目录下,若出现未打包的情况下,是因为再index.json文件配置组件的地方没有写组件
再这个地方配置上的组件都可以被打包,然后开发者工具就可以正常预览了
<my-tab-page>my-tab-page>
Page({
})
{
"usingComponents": {
"my-tab-page":"../../components/tabPage/index"
}
}
<view>my-tab-item</view>
<my-tab-item></my-tab-item>
Component({
})
{
"component": true,
"usingComponents": {
"my-tab-item":"../tabItem/index"
}
}
// 对EasyLess的配置,此段配置去掉则默认生成一个css文件
"less.compile": {
"compress": false, //是否压缩
"sourceMap": false, //是否生成map文件
"out": true, // 是否输出文件,false为不输出
"outExt": ".wxss", // 输出文件的后缀,小程序可以写'wxss'
},