123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- //电脑端banner滑块控件命名空间
- Namespace.register("U.MD.UI.slider");
- /**
- 电脑端banner滑块控件
- */
- /**
- @box {object} 存放控件的div的id
- @imgarr {array} 存放图片的数组
- @speed {string} 轮播速度
- @cut {bool} 判断左右切换按钮是否出现
- @dot {bool} 判断小圆点是否出现
- @cb {回调callback} 引用方法
- **/
- U.MD.UI.slider = function (box, imgarr, attr) {
- //定义传输进来的参数
- var _speed = attr.speed;
- var _arrow = attr.arrow;
- var _dot = attr.dot;
- var _moveFun = attr.moveFun;
- //快速创建存放图片的ul
- var _sliderimgul = $$("ul", { className: 'U_MD_UI_slider_ImgList' }, box);
- //在数组的第一个插入最后一张图片
- imgarr.unshift(imgarr[imgarr.length - 1]);
- //在arrImg[]最后放第一张图片
- imgarr.push(imgarr[1]);
- //for循环创建需要的li
- for (i = 0; i < imgarr.length; i++) {
- var _sliderimgli = $$("li", { className: '' }, _sliderimgul),
- _sliderImg = $$("img", { className: '', src: imgarr[i] }, _sliderimgli); //"onerror": U.MD.C.imgError,
- }
- //快速创建存放左右按钮的ul
- var _sliderbtnul = $$("ul", { className: 'U_MD_UI_slider_Btn' }, box),
- _sliderbtnlil = $$("li", { className: 'U_MD_UI_slider_Left', innerHTML: '<' }, _sliderbtnul),
- _sliderbtnlir = $$("li", { className: 'U_MD_UI_slider_Right', innerHTML: '>' }, _sliderbtnul);
- //快速创建存放小圆点的ul
- var _sliderpointul = $$("ul", { className: 'U_MD_UI_slider_Point' }, box);
- //快速创建li,li的长度为图片的减两张(补图法)
- for (i = 0; i < imgarr.length - 3; i++) {
- //第一个li时,定义第一个li的class
- if (i == 0) {
- $$("li", { className: 'U_MD_UI_slider_On' }, _sliderpointul)[0];
- }
- $$("li", { className: '' }, _sliderpointul)[i];
- }
- //定义父元素的宽度
- var _boxidwidth = box.offsetWidth;
- //定义父元素的高度
- var _boxidheight = box.offsetHeight;
- //定义class为U_MD_UI_slider_ImgList
- var _sliderimglist = box.getElementsByClassName("U_MD_UI_slider_ImgList")[0];
- var _sliderimgli = _sliderimglist.getElementsByTagName("li");
- //定义class为U_MD_UI_slider_Btn
- var _sliderbtn = document.getElementsByClassName("U_MD_UI_slider_Btn")[0];
- //定义class为U_MD_UI_slider_Point
- var _sliderpoint = box.getElementsByClassName('U_MD_UI_slider_Point')[0];
- //定义class为_sliderbtn的所有li
- var _btnli = _sliderbtn.getElementsByTagName("li");
- //定义class为_sliderimglist的li长度
- var _listlen = _sliderimglist.getElementsByTagName("li").length;
- //定义图片索引为1
- var _listindex = 1;
- //定义_sliderpoint里的li
- var _pointdot = _sliderpoint.getElementsByTagName("li");
- //定义_pointdot.length
- var _dotlen = _pointdot.length;
- //定义小圆点索引为0
- var _dotindex = 0;
- //初始化timer
- var timer = null;
- //如果obj.dot为true则显示小圆点
- if (_dot) {
- _sliderpoint.style.display = "block";
- } else {
- _sliderpoint.style.display = "none";
- }
- /** Banner宽度和高度跟随父元素 **/
- //定义_sliderimglist里的li
- var _sliderli = _sliderimglist.getElementsByTagName("li");
- //所有图片的高宽等于盒子
- for (var i = 0; i < _sliderli.length; i++) {
- _sliderli[i].style.width = _boxidwidth + "px";
- _sliderli[i].style.height = _boxidheight + "px";
- }
- //存放图片的ul的总宽度(盒子长度*图片数量)
- _sliderimglist.style.width = (_boxidwidth * imgarr.length) + "px";
- //第一张图片的位置
- _sliderimglist.style.left = -_boxidwidth + "px";
- //左右切换按钮宽度跟随盒子宽度
- _sliderbtn.style.width = _boxidwidth + "px";
- /** 鼠标停留计时器停止或启动、左右按钮显示 **/
- //鼠标停留
- box.onmouseover = function () {
- //如果obj.cut为true则显示按钮
- if (_arrow) {
- _sliderbtn.style.display = "block";
- } else {
- _sliderbtn.style.display = "none";
- }
- //清除计时器
- clearInterval(timer);
- }
- //鼠标离开
- box.onmouseout = function () {
- _sliderbtn.style.display = "none";
- //启动计时器
- timer = setInterval(auto, _speed);
- }
- //定义当前时间
- var sTime = new Date();
- //左边按钮
- _btnli[0].onclick = function () {
- //定义点击后的时间
- var nTime = new Date();
- //点击后时间距离下次点击要大于500ms才能继续下次点击
- if (nTime - sTime > 500) {
- //图片索引和小圆点索引减少
- _listindex--;
- _dotindex--;
- if (_listindex == 0) {
- //调用move函数
- move(_sliderimglist, { left: -_boxidwidth * _listindex }, function () {
- _listindex = _listlen - 2;
- this.style.left = -_listindex * _boxidwidth + "px";
- });
- } else {
- move(_sliderimglist, { left: -_boxidwidth * _listindex });
- }
- //小圆点移动
- _dotindex = _dotindex == -1 ? _dotlen - 1 : _dotindex;
- moveBtn(_dotindex);
- _moveFun && _moveFun(_dotindex + 1);
- }
- sTime = new Date();
- }
- //右边按钮
- _btnli[1].onclick = function () {
- //定义点击后的时间
- var nTime = new Date();
- //点击后时间距离下次点击要大于500ms才能继续下次点击
- if (nTime - sTime > 500) {
- //图片索引和小圆点索引增加
- _listindex++;
- _dotindex++;
- //小圆点索引清零
- _dotindex = _dotindex % _dotlen;
- //图片到最后一张时索引清零重新计算
- if (_listindex == _listlen - 1) {
- move(_sliderimglist, { left: -_boxidwidth * _listindex }, function () {
- _listindex = 1;
- this.style.left = -_listindex * _boxidwidth + "px";
- });
- } else {
- move(_sliderimglist, { left: -_boxidwidth * _listindex });
- }
- //小圆点移动
- moveBtn(_dotindex);
- _moveFun && _moveFun(_dotindex + 1);
- }
- sTime = new Date();
- }
- //定义自动轮播
- timer = setInterval(auto, _speed);
- if (_dotindex == 0) {
- console.log(_dotindex + 1);
- }
- //自动轮播
- function auto() {
- /* for (var i = 0; i < _sliderimgli.length; i++) {
- _sliderimgli[i]._listindex = i;
- //点击小圆点
- //_listindex = this._listindex;
- console.log(_listindex+1);
- }*/
- //图片索引和小圆点索引
- _listindex = ++_listindex % _listlen;
- _dotindex++;
- //小圆点索引清零
- _dotindex = _dotindex % _dotlen;
- //图片到最后一张时索引清零重新计算
- if (_listindex == _listlen - 1) {
- move(_sliderimglist, { left: -_boxidwidth * _listindex }, function () {
- _listindex = 1;
- this.style.left = -_listindex * _boxidwidth + "px";
- });
- } else {
- move(_sliderimglist, { left: -_boxidwidth * _listindex });
- }
- moveBtn(_dotindex);
- _moveFun && _moveFun(_dotindex + 1);
- }
- //遍历小圆点
- for (var i = 0; i < _dotlen; i++) {
- _pointdot[i]._listindex = i;
- //点击小圆点
- _pointdot[i].onclick = function () {
- _dotindex = this._listindex;
- _listindex = _dotindex + 1;
- move(_sliderimglist, { left: -_boxidwidth * _listindex });
- moveBtn(_dotindex);
- //console.log(_dotindex);
- }
- }
- //小圆点样式
- function moveBtn(_dotindex) {
- for (var j = 0; j < _dotlen; j++) {
- _pointdot[j].className = "";
- }
- _pointdot[_dotindex].className = "U_MD_UI_slider_On";
- }
- }
- /*
- 切换过程函数
- @dom {object} 需要移动的对象
- @json {Array}向某个方向移动的距离
- @callback {回调callback}
- */
- function move(dom, json, callback) {
- //清除计时器
- clearInterval(dom.timer);
- dom.timer = setInterval(function () {
- //true这个计时器用来标记json中所有的attr已到达target目标
- var mark = true;
- for (var attr in json) {
- var cur = null;
- if (attr == "opacity") {
- cur = getStyle(dom, attr) * 100;
- } else {
- cur = parseInt(getStyle(dom, attr)) || 0;
- }
- var target = json[attr];
- // console.log(target);
- // console.log(cur);
- var speed = (target - cur) * .2;
- speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
- if (cur != target) {
- if (attr == "opacity") {
- dom.style.filter = "alpha(opacity = " + (cur + speed) + ")"; //ie
- dom.style[attr] = (cur + speed) / 100; //0~1
- } else {
- dom.style[attr] = cur + speed + "px";
- }
- //false表明当前的这个attr没有达到目标
- mark = false;
- }
- //console.log(cur);
- //console.log(1);
- }
- if (mark) {
- clearInterval(dom.timer);
- callback && callback.call(dom);
- }
- }, 100 / 3);
- }
- function getStyle(dom, attr) {
- return dom.currentStyle ? dom.currentStyle[attr] : getComputedStyle(dom, null)[attr];
- }
|