原生javascript实现图片按钮切换


Posted in Javascript onJanuary 12, 2015

先给大家看下效果展示图

原生javascript实现图片按钮切换

以下为详细代码:

function LGY_picSwitch(option){

    this.oWrap = this.getId(option.wrapID); //最外层元素

    this.olistWrap = this.getNodeByClassname(this.oWrap,'gy_picSwitch_listWrap')[0];

    this.oUl = this.olistWrap.getElementsByTagName('ul')[0];

    this.oBtnPrev = this.getNodeByClassname(this.oWrap,'gy_picSwitch_prev')[0];

    this.oBtnNext = this.getNodeByClassname(this.oWrap,'gy_picSwitch_next')[0];

    this.nLen = this.oUl.getElementsByTagName('li').length; //图片总数

    this.nScollCount = option.scrollCount; //每次滚动的数量

    this.nScollLen = Math.ceil(this.nLen/option.scrollCount); // 切换判断的最大值

    this.nSwitchWidth = 0; //每次切换移动的距离,在代码里面动态获取值

    this.nIndex = 0; //切换图片的当前索引

    this.timer = null; //切换图片的引值

    this.int();

}

LGY_picSwitch.prototype = {

    getId:function(id){

        return document.getElementById(id);

    },

    getNodeByClassname:function(parent,classname){

        var classElements = new Array();

        var els = parent.getElementsByTagName('*');

        var elsLen = els.length;

        var pattern = new RegExp("(^|\\s)"+classname+"(\\s|$)");

        for (i = 0, j = 0; i < elsLen; i++) {

                if ( pattern.test(els[i].className) ) {

                        classElements[j] = els[i];

                        j++;

                }

        }

        return classElements;

    },

    getCss:function(node,value)

    {

        return node.currentStyle?node.currentStyle[value]:getComputedStyle(node,null)[value];

    },

    setCss:function(node,val){

        for(var v in val){

            node.style.cssText += ';'+ v +':'+val[v];

        }

    },

    moveFn:function(node,value,targetValue,callback){

        var _that = this;

        clearInterval(this.timer);

        this.timer = setInterval(function()

        {

            var val = parseFloat(_that.getCss(node,value));

            var speed = ( targetValue- val )/8;

            speed = speed>0?Math.ceil(speed):Math.floor(speed);

            if(speed ==0)

            {

                clearInterval(_that.timer);

                callback&&callback();

            }

            else

            {                    

                node.style[value] = ( val + speed ) +'px';                    

            }

            

        },20);

    },

    picChange:function(){

        this.moveFn(this.oUl,'marginLeft',-this.nIndex*this.nSwitchWidth);

    },

    cancelBubble:function(e){

        e.stopPropagation?e.stopPropagation():e.cancelBubble = true;

    },

    btnIsShow:function(){

        this.setCss(this.oBtnNext,{'display':'block'});

        this.setCss(this.oBtnPrev,{'display':'block'});

        if( this.nIndex == 0 ) this.setCss(this.oBtnPrev,{'display':'none'});

        if( this.nIndex ==(this.nScollLen-1) ) this.setCss(this.oBtnNext,{'display':'none'});

    },

    btnPrev:function(){

        var _that = this;

        this.oBtnPrev.onclick = function(e){

            var e = e || window.event;

            _that.cancelBubble(e);

            if(_that.nIndex != 0 ) {

                _that.nIndex--;

                _that.picChange();

                _that.btnIsShow();

            }

        }

    },

    btnNext:function(){

        var _that = this;

        this.oBtnNext.onclick = function(e){

            var e = e || window.event;

            _that.cancelBubble(e);

            if(_that.nIndex != (_that.nScollLen-1) ) {

                _that.nIndex++;

                _that.picChange();

                _that.btnIsShow();

            }

        }

    },

    int:function(){

        //动态获取移动的宽度

        var oLi = this.oUl.getElementsByTagName('li')[0],

            oLi_w = oLi.offsetWidth + parseInt(this.getCss(oLi,'marginLeft')) + parseInt(this.getCss(oLi,'marginRight'));

        this.nSwitchWidth = oLi_w*this.nScollCount;

        //按钮显示初始化

        this.btnIsShow();

        //左右切换

        this.btnPrev();

        this.btnNext();

    }

}

 
 HTML代码:
/*

* HTML结构必需是以下:外层ID名,自己传入 如下面的:id="gy_picSwitch02" ,ID名,自己随便给

但,里面的结构必需一样,包括类名classname

<div id="gy_picSwitch02">

    <span class="gy_picSwitch_prev"></span>

    <span class="gy_picSwitch_next"></span>

    <div class="gy_picSwitch_listWrap">

        <ul>

            <li><img src="images/pic01.jpg" alt=""></li>

            <li><img src="images/pic02.jpg" alt=""></li>

            <li><img src="images/pic03.jpg" alt=""></li>

            <li><img src="images/pic04.jpg" alt=""></li>

            <li><img src="images/pic05.jpg" alt=""></li>

            <li><img src="images/pic06.jpg" alt=""></li>

            <li><img src="images/pic07.jpg" alt=""></li>

            <li><img src="images/pic08.jpg" alt=""></li>

        </ul>

    </div>

</div>

参数:'wrapID':'xxxx',最外层的ID名
      'scrollCount':5,滚动的数量  

   

*

*/

//实例化

 new LGY_picSwitch({'wrapID':'gy_picSwitch','scrollCount':5});

是不是很方便的功能呢,使用也很简单,这里推荐给小伙伴,希望对大家能有所帮助

Javascript 相关文章推荐
JavaScript获取GridView选择的行内容
Apr 14 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
Jan 09 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
Nov 04 Javascript
改变隐藏的input中value的值代码
Dec 30 Javascript
Jquery 获取对象的几种方式介绍
Jan 17 Javascript
让人蛋疼的JavaScript语法特性
Sep 30 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
Nov 07 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
Mar 21 Javascript
javascript过滤数组重复元素的实现方法
May 03 Javascript
js实现小星星游戏
Mar 23 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
Mar 25 Javascript
react使用antd表单赋值,用于修改弹框的操作
Oct 29 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 #Javascript
DOM节点的替换或修改函数replaceChild()用法实例
Jan 12 #Javascript
原生javascript实现Tab选项卡切换功能
Jan 12 #Javascript
推荐4个原生javascript常用的函数
Jan 12 #Javascript
原生js实现日期联动
Jan 12 #Javascript
Javascript中innerHTML用法实例分析
Jan 12 #Javascript
js实现从数组里随机获取元素
Jan 12 #Javascript
You might like
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
详解使用webpack构建多页面应用
2017/12/21 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
python绘制彩虹图
2019/12/16 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
优秀实习自我鉴定
2013/12/04 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
信息总监管理职责范本
2014/03/08 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
2014年班务工作总结
2014/12/02 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
优秀团员自我评价
2015/03/10 职场文书
家电创业计划书
2019/08/05 职场文书