09_JS字符串方法、$封装、无缝滚动、动画、轮播图

返回前面起第一个字符的位置

indexOf(“字符”);

它是从 前面开始数(从左边开始数), 而且只找第一个, 然后返回改字符的位置, 索引号都是从0开始的。 返回的是个数值。

 var txt = “abcdef”;
 alert(txt.indexOf(“d”))      结果就是   3

如果找不到该字符 返回 -1

返回后面起第一个字符的位置

lastIndexOf(索引字符串)

从后面开始数,返回的索引值还是从前面开始数的

例:

var str = "adsfgh";
alert(str.indexOf("s"));//2
alert(str.lastIndexOf("s"));//2

上面两个结果都是2,但是如果str改为

var str = "adsfghsb";
alert(str.indexOf("s"));//2
alert(str.lastIndexOf("s"));//6

这个时候lastIndexOf返回的就是6了

网址编码

我们知道一个网站自己的网址, 不同页面也有自己id网址, 我们经常会做一些, 把网址送入到后台。 但是后台再处理的不认识,比如换行啊等特殊符号的?

encodeURIComponent() 函数可把字符串作为 URI 组件进行编码
decodeURIComponent() 函数可把字符串作为 URI 组件进行解码

例:

        var url =  "http://www.itast.cn?name=cz";
        var encUrl = encodeURIComponent(url);
        console.dir(encUrl);
        console.dir(decodeURIComponent(encUrl));

结果:

http%3A%2F%2Fwww.itast.cn%3Fname%3Dcz
%E7%BC%96%E8%A7%A3%E7%A0%81.html:10 http://www.itast.cn?name=cz

操作字符串

  • 合并字符串
  • 取字符串

concat()

连接字符串

str1.concat(str2);

var txt1 = "abc";
var txt2 = "123";
console.log(txt1.concat(txt2));// "abc123"; 

slice()

slice(“取字符串的起始位置”, [结束位置]) ;
[] 表示可选的参数

起始位置一定要有,结束位置可以省略

var txt = “abcedf”;
txt.slice(3) ;    从 txt 里面字符的 第 3(索引号)个开始取   结束位置省略, 一直取到最后一个。 

总结:

  • slice(3) 从第3个开始取,一直取到最后
  • slice(3,6) 3:从 第3个开始取,6:取到第6索引号的位置,注意:是从左边的第0个开始数。 但是不包 6 。
  • 起始位置可以是负数 , 如果是负数,则是从 右边往左边开始取。
var txt =”asdf”;
txt.slice(-1) ;// 结果是   f 
  • slice(-1);表示从右边第一个开始到右边最后一个
  • slice(-5,-2);表示从右边第五个开始到右边最后二个,不包括第二个

substr()

substr(起始位置,[取的个数])

同上。不写取的个数, 默认从起始位置一直取到最后 。
取的个数: 是指从起始位置开始,往后面数几个。

 var txt = “abcdefghijk”;
 txt.substr(3,4); //从第3个  (d) 开始 数 4个  defg 
  • substr(-1) ;少用,因为 在IE6、7、8 报错 。 尽量少用
  • 兼容性的写法 :
    str.substr(str.length-1,1); // 兼容的写法

substring()

  • substring 同slice 一样的,但是有一点不同
  • substring(3,6) ,substring 始终会把 小的值作为 起始位置 大的值作为结束位置
    例如: substring(6,3) 实际中 自动变成 substring(3,6);

例:保留两位小数

        var PI = 3.1415926;
        var str = PI+"";
        var index = str.indexOf(".");
        var sub = str.substr(0,index+3);
        console.dir(sub);//3.14
        console.dir(parseFloat(sub));//3.14

例:判断文件格式

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript">
        window.onload = function () {
            var file = document.getElementById("mwfile");
            file.onchange = function () {
                var fileName = file.value;

                var index = fileName.lastIndexOf(".");
                var subfix = fileName.substr(index).toUpperCase();
                if(subfix == ".JPG" || subfix == ".PNG"){
                    this.nextSibling.innerHTML = "格式正确";
                }else{
                    this.nextSibling.innerHTML = "格式错误";
                }
            }
        }
    </script>
</head>
<body>
    <input type="file" id="mwfile"/><span></span>
</body>
</html>

例:初步封装Jquery的$选择器

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        div{
            width: 100px;
            height: 100px;
            background-color: pink;
            margin: 5px;
        }
    </style>

</head>
<body>
<div id="demo"></div>
<div></div>
<div class="one"></div>
<div></div>
<div></div>
<div></div>
<script type="text/javascript">
    //封装自己的Class选择器
    function getByClass(className) {
        var arr = [];//用于存放结果的数组
        if (document.getElementsByClassName) {//浏览器支持
            arr = document.getElementsByClassName(className);
        } else {
            var doms = document.getElementsByTagName("*");
            console.dir(doms.length);
            for (var i = 0; i < doms.length; i++) {
                var classArr = doms[i].className.split(" ");//以空格切割
                for(var j=0;j<classArr.length;j++){
                    if(classArr[j] == className){
                        arr.push(doms[i]);
                    }
                }
            }
        }
        return arr;
    }
    function $(str){
        var type = str.charAt(0);
        var flag = str.substr(1);
        switch(type){
            case "#":
                return document.getElementById(flag);
            case ".":
                return getByClass(flag);
            default :
                return document.getElementsByTagName(str);
        }
    }
//    $("div").style.backgroundColor = "pink";
    $("#demo").style.background = "purple";
</script>
</body>
</html>

无缝滚动

原理:首先先复制 两张图片 (第一张和第二张) 放到最后面 (本质上是第 5.6张)
ul 是盒子移动的, 如果ul 的left 值 大于等于 4张图片的宽度,就应该快速复原为0 。

例:循环匀速无缝滚动

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>无缝滚动</title>
    <style type="text/css">
        body,ul,li{
            margin: 0;
            padding: 0;
        }
        ul,li{
            list-style: none;
        }
        .box{
            width: 600px;
            height: 200px;
            margin: 100px auto;
            overflow: hidden;
            position: relative;
        }
        .box ul{
            width: 1800px;
            position: absolute;
        }
        .box ul li{
            float: left;

        }
    </style>
    <script type="text/javascript">
        window.onload = function () {
            var scroll = document.getElementById("scroll");
            var ul = scroll.children[0];
            var num = 0;
            var timer = null;
            function animatorPlay(){
                num--;
                num = num >= -1200?num:0;
                ul.style.left = num+"px";
            }
            timer = setInterval(animatorPlay,20);
            scroll.onmouseover = function () {//停止动画
                clearInterval(timer);
            }
            scroll.onmouseout = function () {//开启动画
                timer = setInterval(animatorPlay,20);
            }
        }
    </script>
</head>
<body>
    <div class="box" id="scroll">
        <ul>
            <li>![](images/01.jpg)</li>
            <li>![](images/02.jpg)</li>
            <li>![](images/03.jpg)</li>
            <li>![](images/04.jpg)</li>
            <li>![](images/01.jpg)</li>
            <li>![](images/02.jpg)</li>
        </ul>
    </div>
</body>
</html>

动画

  • 匀速动画
    匀速动画,看起来效果太简单。
    等差序列 : 2 4 6 8 10
  • 缓动动画公式:
    一个盒子初始值是0,要走到 400 px 的位置,假如说,初始值 leader:0 ,target:400
    box.style.left = xxxx + “px”

leader = leader + (target - leader ) /10 ;

10表示步长
例:缓动动画,先快后慢

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        .box{
            width: 200px;
            height: 200px;
            background-color: pink;
            margin-top: 100px;
            position: absolute;
            left: 0;
            top: 0;
        }
    </style>
    <script type="text/javascript">
        window.onload = function () {
            var btn = document.getElementsByTagName("button")[0];
            var div = document.getElementById("box");
            var leader = 0;
            var target = 500;
            var timer = null;
            btn.onclick = function () {
                timer = setInterval(function () {
                    if((target-leader)<0.005){
                        leader = target;
                        clearInterval(timer);
                    }
                    leader = leader+(target-leader)/20;
                    div.style.left = leader+"px";
                    console.log(leader);
                },50);
            }
        }
    </script>
</head>
<body>
    <button>开始</button>
    <div class="box" id="box"></div>
</body>
</html>

例:轮播图

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>焦点图</title>
    <style type="text/css">
        body,ol,ul,li{
            margin: 0;
            padding: 0;
        }
        ol,ul,li{
            list-style: none;
        }
        img{
            /*清除图片底部3px的间隙*/
            /*方式一*/
            /*border: 0 none;*/
            /*vertical-align: middle;*/
            /*方式二*/
            display: block;
        }
        .slider{
            width: 490px;
            height: 170px;
            border: 1px solid #999;
            margin: 100px auto;
            padding: 5px;
            position: relative;
        }
        .inner{
            width: 100%;
            height: 100%;
            /*background-color: pink;*/
            overflow: hidden;
            position: relative;
        }
        .inner ul{
            width: 1000%;
            position: absolute;
            left: 0;
            top: 0;
        }
        .inner li{
            float: left;
        }
        .slider ol{
            position: absolute;
            left: 35%;
            bottom: 10px;

        }
        .slider ol li{
            float: left;
            background-color: #666;
            width: 24px;
            height: 24px;
            text-align: center;
            line-height: 24px;
            margin-left: 5px;
            border-radius: 12px;
            color: #fff;
        }
        .slider ol li.current{
            background-color: #eee;
            color: #333;
        }
    </style>
    <script type="text/javascript">
        window.onload = function () {
            var slider = document.getElementById("slider");
            var ul = slider.children[0].children[0];
            var ol = slider.children[1];
            var olis = ol.children;
            var leader=0,target = 0;
            for(var i = 0;i<olis.length ;i++){
                var oli = olis[i];
                oli.index = i;
                oli.onmouseover = function () {
                    for(var j=0 ; j<olis.length ; j++){
                        olis[j].className = "";
                    }
                    this.className = "current";
                    target = -this.index*490;//目标位置就是用当前索引乘以盒子宽度
                }
            }
            function PhotoAnimation(){
                leader = leader+(target - leader)/20;
                ul.style.left = leader+"px";
            }
            setInterval(PhotoAnimation , 20);
        }
    </script>
</head>
<body>
    <div class="slider" id="slider">
        <div class="inner">
            <ul>
                <li>![](images/01.jpg)</li>
                <li>![](images/02.jpg)</li>
                <li>![](images/03.jpg)</li>
                <li>![](images/04.jpg)</li>
                <li>![](images/05.jpg)</li>
            </ul>
        </div>
        <ol>
            <li class="current">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ol>
    </div>
</body>
</html>

例:左右点击轮播

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        body,ul,li{
            margin: 0;
            padding: 0;
        }
        ul,li{
            list-style: none;
        }
        a{
            text-decoration: none;
        }
        img{
            /*清除图片底部3px的间隙*/
            /*方式一*/
            /*border: 0 none;*/
            /*vertical-align: middle;*/
            /*方式二*/
            display: block;
        }
        .slider{
            width: 520px;
            height: 280px;
            border: 1px solid #999;
            margin: 100px auto;
            padding: 5px;
            position: relative;
        }
        .inner{
            width: 100%;
            height: 100%;
            /*background-color: pink;*/
            overflow: hidden;
            position: relative;
        }
        .inner ul{
            width: 1000%;
            position: absolute;
            left: 0;
            top: 0;
        }
        .inner li{
            float: left;
        }
        .slider a{
            position: absolute;
            width: 40px;
            height: 70px;
            font: 500 40px/70px "simsun";
            text-align: center;
            top: 100px;
            color: #999;
        }
        .slider .left{
            left: 0;
        }
        .slider .right{
            right: 0;
        }
        .slider a:hover{
            background-color: rgba(0,0,0,.2);
        }
    </style>
    <script type="text/javascript">
        window.onload = function () {
            function $(id){return document.getElementById(id);}
            var slider = document.getElementById("slider");
            var ul = slider.children[0].children[0];

            var leader = 0,target = 0;
            $("left").onclick = function () {
                target<=-520*4?-520*4:target -= 520;//边界检测
            }
            $("right").onclick = function () {
                target>=0?0:target += 520;//边界检测
            }
            function PhotoAnimation(){
                leader = leader+(target - leader)/20;
                ul.style.left = leader+"px";
            }
            setInterval(PhotoAnimation , 20);
        }
    </script>
</head>
<body>
    <div class="slider" id="slider">
        <div class="inner">
            <ul>
                <li>![](images/1.jpg)</li>
                <li>![](images/2.jpg)</li>
                <li>![](images/3.jpg)</li>
                <li>![](images/4.jpg)</li>
                <li>![](images/5.jpg)</li>
            </ul>
        </div>
        <a href="javascript:;" class="left" id="left"> > </a>
        <a href="javascript:;" class="right" id="right"> < </a>
    </div>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容