原生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事件模拟
Jun 27 Javascript
jquery remove方法应用详解
Nov 22 Javascript
Javascript简单实现可拖动的div
Oct 22 Javascript
浅谈重写window对象的方法
Dec 29 Javascript
JQuery中的事件及动画用法实例
Jan 26 Javascript
使用JavaScript+canvas实现图片裁剪
Jan 30 Javascript
JS控制弹出新页面窗口位置和大小的方法
Mar 02 Javascript
深入理解JavaScript编程中的原型概念
Jun 25 Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
Oct 26 Javascript
JS实现数组深拷贝的方法分析
Mar 06 Javascript
jQuery中使用validate插件校验表单功能
May 24 jQuery
原生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
纯php打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
PHP 微信支付类 demo
2015/11/30 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
[00:27]DOTA2次级职业联赛 - Lilith战队宣传片
2014/12/01 DOTA
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
个人股份合作协议书
2014/10/24 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
建议书范文
2015/02/05 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python