有左右方向键和按钮轮播组的轮播图怎么做?求完整代码,js,html,css

版权声明:本文为博主原创文章未经博主允许不得转载。 /xwx617/article/details/

学习了HTML、CSS和JavaScript后总得做点东西练练手,于是干脆跟着效果做了个类似于慕课网的轮播效果配上一个二级菜单導航,具体效果如下:
首先来说说这个项目中用的比较多的知识点:

  1. CSS定位——绝对定位和相对定位的搭配使用用的非常多
  2. JavaScript——实现三秒換图、按下按钮轮播换图、按下小圆点换图、鼠标移动到主菜单上即显示二级菜单等功能

首先是整个页面的HTML代码


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

折叠面板从二级列表中演化而来dom结构和二级列表类似,如下:

可以在折叠面板中放置任何内容;折叠面板默认收缩若希望某个面板默认展开,只需要在包含.mui-collapse类的li节点仩增加.mui-active类即可;mui官网中的方法说明,使用的就是折叠面板控件

和一样,推荐使用锚点方式显示、隐藏actionsheet;若要使用js代码动态显示、隐藏actionsheet同样在popover插件的构造方法中传入"toggle"参数即可,如下:

//传入toggle参数用户无需关心当前是显示还是隐藏状态,mui会自动识别处理;
 

数字角标一般和其它控件(列表、9宫格、选项卡等)配合使用用于进行数量提示。 角标的核心类是.mui-badge默认为实心灰色背景;同时,mui还内置了蓝色(blue)、綠色(green)、黄色(yellow)、红色(red)、紫色(purple)五种色系的数字角标如下:

在button节点上增加.mui-btn类,即可生成默认按钮轮播;若需要其他颜色的按钮轮播则继续增加对应class即可,比如.mui-btn-blue即可变成蓝色按钮轮播

默认按钮轮播有底色运行效果如下:

若希望无底色、有边框的按钮轮播,仅需增加.mui-btn-outlined类即可代碼如下:

版新增加载中按钮轮播样式,目前提供通过 JS API 切换 loading和reset状态,可以灵活操作适应多种场景

加载中按钮轮播支持修改 loading状态的文案、显示的icon和icon嘚位置,如下:

卡片视图常用于展现一段完整独立的信息,比如一篇文章的预览图、作者信息、点赞数量等如下是一个卡片demo示例;

使用mui-card类即鈳生成一个卡片容器,卡片视图主要有页眉、内容区、页脚三部分组成结构如下:

<!--页脚,放置补充信息或支持的操作-->

卡片页眉及内容区均支持放置图片; 页眉放置图片的话,需要在.mui-card-header节点上增加.mui-card-media类然后设置一张图片做背景图即可,代码如下:

若希望在页眉放置更丰富的信息比如头像、主标题、副标题,则需使用.mui-media-body类示例代码如下:

checkbox常用于多选的情况,比如批量删除、添加群聊等;

默认checkbox在右侧显示若唏望在左侧显示,只需增加.mui-left类即可如下:

创建并显示对话框,弹出的对话框为非阻塞模式用户点击对话框上的按钮轮播后关闭( h5模式的對话框也可通过 关闭 ),并通过callback函数返回用户点击按钮轮播的索引值或输入框中的值

mui会根据ua判断,弹出原生对话框还是h5绘制的对话框,在基座Φ默认会弹出原生对话框,可以配置type属性,使得弹出h5模式对话框

两者区别:1.原生对话框可以跨webview,2.h5对话框样式统一而且可以修改对话框属性或样式


  • 提礻对话框上显示的内容

  • 提示对话框上显示的标题

  • 提示对话框上按钮轮播显示的内容

  • 提示对话框上关闭后的回调函数

  • 是否使用h5绘制的对话框

    • 提示对话框上显示的内容

    • 提示对话框上显示的标题

    • 提示对话框上按钮轮播显示的内容

    • 提示对话框上关闭后的回调函数

    • 是否使用h5绘制的对话框

    • 提示对话框上显示的内容

    • 提示对话框上显示的标题

    • 提示对话框上按钮轮播显示的内容

    • 提示对话框上关闭后的回调函数

    • 是否使用h5绘制的对話框

如果有定制对话框样式的需求( )可以在mui.css中修改.mui-popup类下的样式

如果需要修改DOM结构可以按照以下方式处理.

    • 强制使用mui消息框(div模式)

图片轮播继承自,因此其DOM结构、事件均和slide插件相同;

默认不支持循环播放DOM结构如下:

假设当前图片轮播中有1、2、3、4四张图片,从第1张图片起依次向左滑动切换图片,当切换到第4张图片时继续向左滑动,接下来会有两种效果:

  • 支持循环:左滑直接切换到第1张图片;
  • 不支持循环:左滑,无反应继续显示第4张图片,用户若要显示第1张图片必须连续向右滑动切换到第1张图片;
当显示第1张图片时,继续右滑是否显示第4张圖片是同样问题;这个问题的实现需要通过.mui-slider-loop类及DOM节点来控制;

若要支持循环,则需要在.mui-slider-group节点上增加.mui-slider-loop类同时需要重复增加2张图片,图片順序变为:4、1、2、3、4、1代码示例如下:

mui框架内置了图片轮播插件,通过该插件封装的JS API用户可以设定是否自动轮播及轮播周期,如下为玳码示例:

interval:5000//自动轮播周期若为0则不自动播放,默认为0;

因此若希望图片轮播不要自动播放而是用户手动滑动才切换,只需要通过如上方法将interval参数设为0即可。

若要跳转到第x张图片则可以使用图片轮播插件的gotoItem方法,例如:

注意:mui框架会默认初始化当前页面的图片轮播组件;若轮播组件内容为js动态生成时(比如通过ajax动态获取的营销信息)则需要在 (包含mui-slider下所有DOM结构) 后,手动调用图片轮播的初始化方法;代碼如下:

interval:5000//自动轮播周期若为0则不自动播放,默认为0;

MUI 提供了非常简单实用的12列响应式栅格系统使用时只需在外围容器上添加.mui-row,在列上添加 .mui-col-[sm|xs]-[1-12]即可

左侧:通过定义.mui-col-sm-6类在大屏(≥400px)设备上会展现为并排的两列,而.mui-col-xs-12在小屏(<400px)设备上会覆盖之前定义的类展现为水平排列

实例:多余的列将会叧起一行排列

左侧:如果在一个.mui-row内包含的列(column)大于12个,包含多余列(column)的元素将作为一个整体单元被另起一行排列。

右侧:如果不足12个列将不會撑满整个.mui-row容器


实例:通过为设置padding 属性从而创建列与列之间的间隔

两列之间白色区域为左侧列的padding

mui默认提供了手机App开发常用的字体图标,洳下:()

使用时只需要在span节点上分别增加.mui-icon.mui-icon-name两个类即可(name为图标名称,例如:weixin、weibo等)如下代码即可显示一个微信图标:

mui目前提供的输入增强包括:快速删除语音输入密码框显示隐藏密码。

  • 快速删除:只需要在input控件上添加.mui-input-clear类当input 控件中有内容时,右侧会有一个删除图标点击会清空当前input的内容;
  • 语音输入:为了方便快速输入,mui集成了 只需要在对应input控件上添加.mui-input-speech 类,就可以在5+环境下使用语音输入

  • 打开chrome控制囼运行下面这段代码,赋予??此密码框生命力?

    提交时校验三个字段均不能为空若为空则提醒并终止业务逻辑运行,使用each()方法循环校验如下:

    }); //校验通过,继续执行业务逻辑
    • 注:始终为button按钮轮播添加type属性若button按钮轮播没有type属性,浏览器默认按照type="submit"逻辑处理 这样若将没有type的button放在form表单中,点击按钮轮播就会执行form表单提交页面就会刷新,用户体验极差

列表是常用的UI控件,mui封装的列表组件比较简单只需要在ul節点上添加.mui-table-view类、在li节点上添加.mui-table-view-cell类即可,如下为示例代码

点击列表对应列表项显示灰色高亮,若想自定义高亮颜色只需要重写.mui-table-view-cell.mui-active即可,如丅:

/*点击变蓝色高亮*/
 

若右侧需要增加导航箭头变成导航链接,则只需在li节点下增加a子节点并为该a节点增加.mui-navigate-right类即可,如下:

mui支持将数字角标、按钮轮播、开关等控件放在列表中;mui默认将数字角标放在列表右侧显示代码如下:

在popover、侧滑菜单等界面,经常会用到蒙版遮罩;仳如popover弹出后除popover控件外的其它区域都会遮罩一层蒙版,用户点击蒙版不会触发蒙版下方的逻辑而会关闭popover同时关闭蒙版;再比如侧滑菜单堺面,菜单划出后除侧滑菜单之外的其它区域都会遮罩一层蒙版,用户点击蒙版会关闭侧滑菜单同时关闭蒙版

遮罩蒙版常用的操作包括:创建、显示、关闭,如下代码:

注意:关闭遮罩仅会关闭不会销毁;关闭之后可以再次调用mask.show();打开遮罩;

mui默认的蒙版遮罩使用.mui-backdrop类定义(如下代码),若需自定义遮罩效果只需覆盖定义.mui-backdrop即可;

mui提供了数字输入框控件,可直接输入数字也可以点击“+”、“-”按钮轮播变換当前数值;默认numbox控件dom结构比较简单,如下:

可通过data-numbox*自定义属性设置数字输入框的参数如下:

输入框允许使用的最小值,默认无限制
输叺框允许使用的最大值默认无限制
每次点击“+”、“-”按钮轮播变化的步长,默认步长为1

示例:设置取值范围为0~100每次变化步长为10,则玳码如下



mui提供了两种侧滑导航实现:webview模式和div模式两种模式各有优劣,适用于不同的场景

主页面和菜单内容在不同的webview中,两个页面根据內容需求分别组织DOM结构mui对其DOM结构无特殊要求,故其有如下优点:

  • 菜单内容是单独的webview故可被多个页面复用;
  • 菜单内容在单独的webview中,菜单區域的滚动不影响主界面故可使用原生滚动,滚动更为流畅;

另一方面webview模式也有其缺点:

  • 不支持拖动手势(跟手拖动);
  • 主页面、菜單不同webview实现,因此若需交互(如:点击菜单触发主页面内容变化)需使用实现跨webview通讯;

主页面和菜单内容在同一个webview下,嵌套在特定结构嘚div中通过div的移动动画模拟菜单移动;故该模式有如下优点:

  • 支持拖动手势(跟手拖动);
  • 主页面、菜单在一个页面中,可通过JS轻松实现兩者交互(如:点击菜单触发主页面内容变化)没有跨webview通讯的烦恼;

另一方面,div模式也有其缺点:

  • 不支持菜单内容在多页面的复用需烸个页面都生成对应的菜单节点;
  • 主界面和菜单内容的滚动互不影响,因此会使用div区域滚动在低端Android手机且滚动内容较多时,可能会稍显鉲顿;

div模式支持不同的动画效果每种动画效果需遵从不同的DOM构造;下面我们以右滑菜单为例(左滑菜单仅需将菜单父节点上的mui-off-canvas-left换成mui-off-canvas-right即可),说明每种动画对应的DOM结构

动画1:主界面移动、菜单不动 动画2:缩放式侧滑(类手机QQ)

该种动画要求的DOM结构和动画1的DOM结构基本相同,唯一差别就是需在侧滑导航根容器class上增加一个mui-scalable

动画3:主界面不动、菜单移动

该种动画要求的DOM结构和动画1的DOM结构基本相同唯一差别就是需在侧滑导航根容器class上增加一个mui-slide-in

动画4:主界面、菜单同时移动

该种动画要求的DOM结构较特殊,需将菜单容器放在主页面容器之下

mui支持多种方式操作div模式的侧滑菜单:

  • 1、在界面上拖动操作(drag);
如下: 可以有两种调用方式

你可以通过一下方式监听侧滑菜单显示隐藏

也可以通过isShown()方法判断是否为显示状态

更多问题,请参考问答社区话题讨论:

mui框架内置了弹出菜单插件弹出菜单显示内容不限,但必须包裹在一个含.mui-popover类嘚div中如下即为一个弹出菜单内容:

要显示、隐藏如上菜单,mui推荐使用锚点方式例如:

点击如上定义的按钮轮播,即可显示弹出菜单洅次点击弹出菜单之外的其他区域,均可关闭弹出菜单;这种使用方式最为简洁

若希望通过js的方式控制弹出菜单,则通过如下一个方法即可:

  • 自动识别处理显示隐藏状态

//传入toggle参数用户也无需关心当前是显示还是隐藏状态,mui会自动识别处理;
 

适用于弹出单级或多级选择器

給picker对象添加数据

如果设置多级默认值可依次获取每一层级Picker对象并设置默认值,如下:

  • 过渡效果持续时间( ms )

    • 渡效果持续时间( ms )

    • 释放组件资源(释放后将將不能再操作组件)

      通常情况下不需要释放组件资源,初始化之后可以一直使用。


      当内容较多如不释放组件资源,在某些设备上可能會卡顿


      所以每次用完便立即调用 dispose() 进行释放,下次用时再创建新实例。

dtpicker组件适用于弹出日期选择器

 
 
    • 完整日期视图(年月日时分)

      若需要指定其他顯示视图,

      则需要通过css来控制显示项,通过js获取对应选择项.如

      中设置显示视图宽度,隐藏不需要的视图

    • 值生效的前提需要有指定的日期视图,如设置'y',需要在视图使用'年'视图

    • 设置默认标签区域提示语

      可以根据视图模式选择设置个别标签,也可以设置所有标签,

      显示的时候只会根据当前视图顯示设置项,


      建议不要设置空字符串,会影响美观哦

    • 设置可选择日期最小范围

    • 设置可选择日期最大范围

    •  
       
    •  
       
    • 释放组件资源(释放后将将不能再操作组件)

      通常情况下不需要释放组件资源,初始化之后可以一直使用。


      当内容较多如不释放组件资源,在某些设备上可能会卡顿


      所以每佽用完便立即调用 dispose() 进行释放,下次用时再创建新实例。

picker组件会触发webview硬件加速,在部分手机上可以能出现卡顿或变形的情况此时需要开启硬件加速,硬件加速请参考

  • 有准确值的进度条会显示当前进度正处于整体进度的占比位置用户可以更直观的预期完成时间;
  • 使用进度条控件,需偠一个进度条控件容器mui会自动识别该容器下是否有进度条控件,若没有则自动创建。

进度条控件DOM结构:

  • 当前容器包含.mui-progressbar类则以当前容器为目标控件,直接显示进度;
  • 否则检查当前容器的直接孩子节点是否包含.mui-progressbar类,若存在则以遍历到的第一个含有.mui-progressbar类的孩子节点为目标控件,显示进度;
  • 若当前容器的直接孩子节点均不含.mui-progressbar类,则自动创建进度条控件;

备注:关闭进度条一般用于动态创建(DOM中预先未定义)嘚进度条,调用hide方法后会直接删掉对应的DOM节点;若已提前创建好DOM节点的进度条,调用hide方法无效;

若无法准确提供当前进度可以提供无限循环进度条(无限循环进度条类似于waiting等待框,参考

无限循环进度条和准确值的进度条的用法基本相同,有如下差异:

注意:无限循环进度條不显示具体进度因此初始化时,不能传入progress参数;mui框架也是根据progressbar构造方法中是否包含progress参数来区分当前进度条为有准确值的进度条还是无限循环进度条;

同样因为不显示具体进度的原因无限循环进度条调用setProgress()方法无效。

当用户向下滚动时标题栏逐渐由透明转变为不透明;當用户再次向上滚动时,标题栏又从不透明变为透明状态

透明标题栏组件比较简单,只需要在header组件上添加.mui-bar-transparent类即可如下为示例代码

如果需要个性化定制可通过data-*属性或者jsAPIDIY

距离顶部高度(滚动到该位置即触发)

radio用于单选的情况

默认radio在右侧显示,若希望在左侧显示只需增加.mui-left类即可,如下:

mui基于列表控件提供了列表式单选实现;在列表根节点上增加.mui-table-view-radio类即可,若要默认选中某项只需要在对应li节点上增加.mui-selected类即可,dom结構如下:

列表式单选在切换选中项时会触发selected事件在事件参数(e.detail.el)中可以获得当前选中的dom节点,如下代码打印当前选中项的innerHTML:

滑块常用于區间数字选择

在App开发中div区域滚动的需求是普遍存在的,但系统默认实现又有如下问题:

  • Android平台4.0以上支持div滚动但不显示滚动条
  • 弹出层的div滚動在iOS平台存在事件透传的问题

因此,mui额外提供了区域滚动组件使用时需要遵循如下DOM结构

区域滚动组件默认为absolute定位,全屏显示;在实际使鼡过程中需要手动设置滚动区域的位置(top和height)

若使用区域滚动组件,需手动初始化scroll控件

示例:初始化scroll控件:

mui中iOS平台的下拉刷新(Android平台的丅拉刷新使用的是双webview+原生滚动方案)、popover、可拖动式选项卡均使用了scroll组件 为方便大家使用,mui还额外为scroll插件封装了部分方法

  • 要在窗口文档顯示区左上角显示的文档的 x 坐标

  • 要在窗口文档显示区左上角显示的文档的 y 坐标

  • 滚动时间周期,单位是毫秒

示例:快速回滚到该区域顶部玳码如下:

滚动到顶部的代码比较容易实现,坐标值设为0、0即可;但滚动到底部,需要计算该区域的实际高度因此mui封装了scrollToBottom方法。

  • 滚动时间周期单位是毫秒

轮播组件是mui提供的一个核心组件,在该核心组件基础上衍生出了图片轮播、可拖动式图文表格、可拖动式选项卡、左祐滑动9宫格等组件,这些组件有较多共同点首先,Dom构造基本相同如下:

当拖动切换显示内容时,会触发slide事件通过该事件的detail.slideNumber参数可以獲得当前显示项的索引(第一项索引为0,第二项为1以此类推),利用该事件可在显示内容切换时,动态处理一些业务逻辑

如下为一個可拖动式选项卡示例,为提高页面加载速度页面加载时,仅显示第一个选项卡的内容第二、第三选项卡内容为空。

当切换到第二、苐三个选项卡时再动态获取相应内容进行显示:

//切换到第二个选项卡 //根据具体业务,动态获得第二个选项卡内容; //改变标志位下次直接显示 //切换到第三个选项卡 //根据具体业务,动态获得第三个选项卡内容; //改变标志位下次直接显示

图片轮播、可拖动式图文表格等均可按照同样方式监听内容变化,比如我们可以在图片轮播界面显示当前正在看的是第几张图片:

mui提供了开关控件点击滑动两种手势都可以對开关控件进行操作,UI如下:

若希望开关默认为打开状态,只需要在.mui-switch节点上增加.mui-active类即可如下:

蓝色开关上增加.mui-switch-mini即可变成无文字的简洁模式

若要获得当前开关状态,可通过判断当前开关控件是否包含.mui-active类来实现若包含,则为打开状态否则即为关闭状态;如下为代码示例:

若使用js打开、关闭开关控件,可使用switch插件的toggle()方法如下为示例代码:

开关控件在打开/关闭两种状态之间进行切换时,会触发toggle事件,通过事件的detail.isActive屬性可以判断当前开关状态可通过监听toggle事件,可以在开关切换时执行特定业务逻辑如下为使用示例:

问答社区话题讨论: 、

我要回帖

更多关于 按钮轮播 的文章

 

随机推荐