IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 微信小程序自定义组件 -> 正文阅读

[移动开发]微信小程序自定义组件

一、搜索框

components/SearchInput:

//components.js

Component({
 options: {
        addGlobalClass: true, // 自定义组件中不显示iconfont的解决
    },
    properties: {
        title: {
            type: String,
            value: ''
        }
    },
})
<!-- SearchInput.wxml -->

<view class="searchContainer">
    <text class="iconfont icon-sousuo"></text>
    <navigator class="search" url="/pages/search/search" hover-class="none">{{title}}</navigator>
</view>
/* SearchInput.wxss */
.searchContainer {
    display: flex;
    padding: 0 20rpx;
    width: 260rpx;
    height: 50rpx;
    line-height: 50rpx;
    border: 1rpx solid var(--themeColor);
    border-radius: 25rpx;
    color: #666;
}

.searchContainer .search {
    margin-left: 10rpx;
    font-size: 25rpx;
}

使用:

xx.json页面中:

{
    "usingComponents": {
        "SearchInput": "../../components/SearchInput/SearchInput"
    }
}
<!-- xx.wxml -->
<SearchInput title="搜索发现更多音乐"></SearchInput>

二、推荐歌曲,导航

components/Tabs:

// Tabs.js
Component({
    properties: {
        headerTitle: {
            type: String,
            value: ''
        },
        Moretitle: {
            type: String,
            value: ''
        }
    },

})

?Tabs.wxml:


<view class="header">
    <view class="headerTitle">{{headerTitle}}</view>
    <view class="headerMore">
        <view class="moreTitle">{{Moretitle}}</view>
        <view class="more">查看更多</view>
    </view>
</view>

?Tabs.wxss:

.header .headerMore {
  /* 由于子元素全部浮动,父元素要清除浮动,flex布局更好一些 */
  overflow: hidden;
}
.header .headerMore .moreTitle {
  float: left;
  font-size: 30rpx;
}
.header .headerMore .more {
  float: right;
  border: 1rpx solid #ccc;
  padding: 5rpx 15rpx;
  border-radius: 15rpx;
}

使用:

index.json:

{
    "usingComponents": {
        "Tabs": "/components/Tabs/Tabs"
    }
}

index.wxml:

<Tabs headerTitle="推荐歌曲" Moretitle="为你精心推荐"></Tabs>

三、搜索框另一种样式:

?components/SearchInput:

<!-- components/SearchInput/SearchInput.wxml -->
<view class="searchContainer">
    <navigator class="search" url="/pages/search/search">搜索</navigator>
</view>
.searchContainer {
  height: 90rpx;
  padding: 10rpx;
  background-color: #eb4450;
}
.searchContainer .search {
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 10rpx;
  height: 100%;
  font-size: 26rpx;
  color: #666;
  background-color: #fff;
}

使用:

xx.json

{
    "usingComponents": {
        "SearchInput": "../../components/SearchInput/SearchInput"
    },
    "navigationBarTitleText": "分类"
}

xx.wxml:?


<SearchInput></SearchInput>

?四、导航栏切换

?

Component({
    options: {
        addGlobalClass: true, // 自定义组件中不显示iconfont的解决
    },
// 组件的属性列表
  properties: {
        tabs: {
            type: Array,
            value: []
        },
        desc: {
            type: Boolean,
            value: true
        }
    },
//组件的方法列表
   methods: {
        changeNav(e) {
            let index = e.currentTarget.dataset.index
                // 触发父组件中的自定义事件
            this.triggerEvent("itemChange", { index })
        },
    }
})
<view class="tabs">
    <view class="title">
        <view class="navItem {{item.isActive?'active':''}}" wx:for="{{tabs}}" wx:key="id" bindtap="changeNav" data-index="{{index}}">
            <block wx:if="{{item.name=='价格'}}">
                <text>{{item.name}}</text>
                <text class="iconfont {{desc?'icon-jiangxu':'icon-shengxu'}}"></text>
            </block>
            <block wx:else>
                {{item.name}}
            </block>
        </view>
    </view>
    <view class="content">
        <slot></slot>
    </view>
</view>

.tabs {
  height: 90rpx;
  border-bottom: 1rpx solid #ddd;
  color: #777575;
  font-size: 30rpx;
}
.tabs .title {
  display: flex;
}
.tabs .title .navItem {
  height: 90rpx;
  display: flex;
  flex: 1;
  justify-content: center;
  align-items: center;
}
.tabs .title .navItem.active {
  color: var(--themeColor);
  border-bottom: 1rpx solid var(--themeColor);
}

使用:

goods_list.json

{
    "usingComponents": {
        "searchInput": "../../components/SearchInput/SearchInput",
        "Tabs": "../../components/Tabs/Tabs"
    },
    "navigationBarTitleText": "商品列表"
}

goods_list.wxml:

<Tabs tabs="{{tabs}}" desc="{{desc}}" binditemChange="itemChange">
        <block wx:if="{{goodsList.length!==0}}">
            <scroll-view class="scrollGoodsList" scroll-y bindscrolltolower="bindscrolltolower" bindrefresherrefresh="bindrefresherrefresh" refresher-enabled="{{refresherEnabled}}" refresher-triggered="{{refresherTriggered}}" scroll-top="{{scrollTop}}">
                <view class="goodsContainer">
                    <navigator wx:for="{{goodsList}}" wx:key="goods_id" url="/pages/goods_detail/goods_detail?gid={{item.goods_id}}">
                        <view class="goodsImage">
                            <image mode="widthFix" src="{{item.goods_small_logo?item.goods_small_logo:noPic}}" />
                        </view>
                        <view class="goodsInfo">
                            <view class="title">{{item.goods_name}}</view>
                            <view class="price">¥ {{item.goods_price}}</view>
                        </view>
                    </navigator>
                </view>
            </scroll-view>
        </block>
        <block wx:else>
            <image class="no-data" mode="widthFix" src="/static/images/no-data.png"></image>
            <navigator class="goSelect" open-type="switchTab" url="/pages/category/main">
                该分类暂无数据,换个试试吧~
            </navigator>
        </block>
</Tabs>

goods_list.js

Page({

  data: {
  tabs: [{
            id: 0,
            name: '综合',
            isActive: true
        }, {
            id: 1,
            name: '销量',
            isActive: false
        }, {
            id: 2,
            name: '价格',
            isActive: false
        }], // 导航栏
},

// 切换导航,子组件传递过来的
    itemChange(e) {
        let idx = e.detail.index
        let tabs = JSON.parse(JSON.stringify(this.data.tabs))
        tabs.map((item, index) => idx === index ? item.isActive = true : item.isActive = false)
        this.setData({
            tabs,
        })
    }

})

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:40:21  更:2021-09-24 10:43:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:32:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码