原生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知识点之&quot;深入理解作用域链&quot;的介绍
Apr 23 Javascript
javascript右下角弹层及自动隐藏(自己编写)
Nov 20 Javascript
一个简单的Node.js异步操作管理器分享
Apr 29 Javascript
JavaScript实现的经典文件树菜单效果
Sep 08 Javascript
javascript实现禁止复制网页内容汇总
Dec 30 Javascript
深入剖析javascript中的exec与match方法
May 18 Javascript
javascript基于原型链的继承及call和apply函数用法分析
Dec 15 Javascript
基于vue2的table分页组件实现方法
Mar 20 Javascript
React Navigation 使用中遇到的问题小结
May 08 Javascript
js replace 全局替换的操作方法
Jun 12 Javascript
关于React动态加载路由处理的相关问题
Jan 07 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
Sep 27 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
PHP新手上路(十一)
2006/10/09 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
php提交表单时保留多个空格及换行的文本样式的方法
2017/06/20 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
js实现登录验证码
2016/12/22 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
python快速查找算法应用实例
2014/09/26 Python
Python中的自省(反射)详解
2015/06/02 Python
Python之用户输入的实例
2018/06/22 Python
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
实习生个人找工作的自我评价
2013/10/30 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
反邪教观后感
2015/06/11 职场文书