从0开始学web-day35-js进阶05

18 篇文章 0 订阅

1.复习
day35-js05复习
2.鼠标滚轮轮播图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        #container {
            position: relative;
            width: 560px;
            height: 300px;
            margin: 50px auto;
            border: 3px solid red;
            overflow: hidden;
        }
        /* 滚动轮播图的布局关键: ul的宽度是足够的大 */
        #imgs {
            position: absolute;
            width: 8888px;
            height: 300px;
            left: 0;
            top: 0;
        }
        /* 所有的li元素并排在一起 */
        #imgs > li {
            float: left;
        }

    </style>
</head>
<body>
    <!-- 布局 -->
    <div id="container">
        <ul id="imgs">
            <li><img src="./images/0.jpg" alt=""></li>
            <li><img src="./images/1.jpg" alt=""></li>
            <li><img src="./images/2.jpg" alt=""></li>
            <li><img src="./images/3.jpg" alt=""></li>
            <li><img src="./images/4.jpg" alt=""></li>
            <!-- 设置猫腻图 -->
            <li><img src="./images/0.jpg" alt=""></li>
        </ul>
    </div>
    <!-- 引入tools -->
    <script src="./js/tools.js"></script>
    <script>
    // 获取元素
    var container = $('container');
    var ul = $('imgs');
    // 所有的图片
    var lis = document.getElementsByTagName('li');
    // 定义长度
    var length = lis.length - 1;
    console.log(length);
    // 获取元素的宽度
    var width = container.clientWidth;
    // 定义锁
    var lock = true;

    // 定义信号量
    var idx = 0;

    // 定义获取滚轮方向的方法
    function direction(e) {
        // 在chrome中 指示鼠标滚轮方向的属性: e.wheelDelta
        // console.log(e.wheelDelta);

        // 在火狐中 指示鼠标滚轮方向的属性: e.detail
        // console.log(e.detail);

        // 定义结果变量

        // 由于e.wheelDelta在火狐中显示的是undefined 所以可以通过判断是否是undefined 来判断出浏览器信息
        if (e.wheelDelta === undefined) {
            // 指示鼠标滚轮方向的属性: e.detail
            // 判断鼠标滚轮的方向
            // if (e.detail > 0) {
            //     // 向下滚动 3
            //     return true;
            // } else {
            //     // 向上滚动 -3
            //     return false;
            // }

            // 当值是二取一的时候 就可以使用三目运算简化
           return e.detail > 0 ? true : false; 

        } else {
            // 指示鼠标滚轮方向的属性: e.wheelDelta
            // 判断鼠标滚轮的方向
            // if (e.wheelDelta > 0) {
            //     // 向上滚动
            //     return false;
            // } else {
            //     // 向下滚动
            //     return true;
            // }


            // 值为假的有6个: '' undefined NaN null false 0
            // 简写
            return e.wheelDelta > 0 ? false : true;
        }
    }

    // 绑定事件
    bindEvent(document, 'mousewheel', function(e) {
        // 执行方法获取滚轮方向
        if (direction(e)) {
            // 判断锁的状态
            if (!lock) return;

            // 把锁关闭
            lock = false;

            // 说明图片应该从右边进去 相当于右按钮事件
            // 右按钮事件的策略: 先拉动 再验证

            // 该变信号量
            idx++;

            // 拉动
            animate(ul, { left: -width * idx }, 600, function() {
                // 验证信号量
                if (idx > length - 1) {
                    // 让idx从0开始
                    idx = 0;
                    // 瞬移到真图
                    css(ul, 'left', 0);
                }

                // 动画执行完毕之后 开锁
                lock = true;
            }) 

        } else {
            // 判断锁的状态
            if (!lock) return;
           
            // 把锁关闭
            lock = false;

            // 说明是向上滑动 相当于左按钮点击事件 
            // 左按钮点击事件策略: 先验证 后拉动

            // 改变信号量
            idx--;

            // 先验证
            if (idx < 0) {
                // 让idx变为最大值
                idx = length - 1;
                // 瞬移
                // 注意: 设置的value值要加上px
                css(ul, 'left', -width * length + 'px');
            }

            // 拉动
            animate(ul, { left: -width * idx }, 600, function() {
                console.log('动画执行完毕了');

                // 开锁
                lock = true;
            })

        }
    })
    </script>
</body>
</html>

3.面向对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    // 我们想要通过变量来描述一个人
    // 人的特征有: 姓名 性别  年龄 身高
    // 因此我们要通过四个变量来描述一个人

    // var name = '张三';
    // var age = 30;
    // var sex = '男';
    // var length = 175;

    // 如果想要描述10个人  则需要40个变量
    // 所以对象这个数据结构解决了以上变量增多的问题

    // var person = {
    //     name: 'wangwu',
    //     age: 31,
    //     sex: 'nan',
    //     length: 180
    // }

    // var person2 = {
    //     name: 'wangwu2',
    //     age: 32,
    //     sex: 'nan',
    //     length: 181
    // }

    // 现在虽然可以通过粘贴复制的形式快速创建一个人 但是我们仍然希望有一种简单的形式能够快速创建同类型的对象出来
    // 结论: 使用函数 函数是可以复用的

    // // 定义创建对象的函数
    // function createObject() {
    //     // 定义对象
    //     var person = {
    //         name: 'wangwu3',
    //         age: 33,
    //         sex: 'nan',
    //         length: 183
    //     }

    //     // 返回对象
    //     return person;
    // }

    // // 执行方法
    // var p = createObject();
    // var p1 = createObject();
    // console.log(p);
    // console.log(p1);

    // 目前为止 虽然可以快速创建一个同类型的数据结构出来 但是该对象中的数据值都是一样的  而我们希望每一个对象的数据值都是不同的
    // 结论: 可以将不变的数据写死  将可变的值提取为函数的参数即可


    // 改造:
    // 定义创建对象的函数
    function createObject(name, age, sex, length) {
        // 定义对象
        var person = {
            name: name,
            age: age,
            sex: sex,
            length: length
        }
        // 返回对象
        return person;
    }

    // 执行方法
    var p = createObject('xiaoming', 12, 'nan', 165);
    var p1 = createObject('xiaohong', 11, 'nv', 160);
    var p2 = createObject('xiaogang', 13, 'nan', 170);
    console.log(p);
    console.log(p1);

    // 此时可以执行方法并传递不同的参数 即可得到不同的对象
    // 而这个函数此时叫做 '工厂方法'
    </script>
</body>
</html>

4.将面向过程改为面向对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        #container {
            position: relative;
            width: 560px;
            height: 300px;
            margin: 50px auto;
            border: 3px solid red;
            overflow: hidden;
        }
        /* 滚动轮播图的布局关键: ul的宽度是足够的大 */
        #imgs {
            position: absolute;
            width: 8888px;
            height: 300px;
            left: 0;
            top: 0;
        }
        /* 所有的li元素并排在一起 */
        #imgs > li {
            float: left;
        }

    </style>
</head>
<body>
    <!-- 布局 -->
    <div id="container">
        <ul id="imgs">
            <li><img src="./images/0.jpg" alt=""></li>
            <li><img src="./images/1.jpg" alt=""></li>
            <li><img src="./images/2.jpg" alt=""></li>
            <li><img src="./images/3.jpg" alt=""></li>
            <li><img src="./images/4.jpg" alt=""></li>
            <!-- 设置猫腻图 -->
            <li><img src="./images/0.jpg" alt=""></li>
        </ul>
    </div>
    <!-- 引入tools -->
    <script src="./js/tools.js"></script>
    <script>
    // 以下是面向对象的形式:
    // 定义对象
    var carousel = {
        // dom属性
        dom: document.getElementById('imgs'),
        // 图片属性
        lis: document.getElementsByTagName('li'),
        // 长度属性
        length: document.getElementsByTagName('li').length - 1,
        // 宽度属性
        width: document.getElementById('container').clientWidth,
        // 锁
        lock: true,
        // 信号量
        idx: 0,

        // 获取鼠标滚轮方向的方法 (一个方法尽量只做一件事件)
        direction: function(e) {
            if (e.wheelDelta === undefined) {
                // 当值是二取一的时候 就可以使用三目运算简化
            return e.detail > 0 ? true : false; 

            } else {
                // 简写
                return e.wheelDelta > 0 ? false : true;
            }
        },
        // 显示下一张图片方法
        showNext: function() {
            // 方法中的this指向carousel

            // 判断锁的状态
            if (!this.lock) return;

            // 把锁关闭
            this.lock = false;

            // 该变信号量
            this.idx++;

            // 缓存(备份)this
            var me = this;

            // 拉动
            animate(this.dom, { left: -this.width * this.idx }, 600, function() {
                // 验证信号量
                if (me.idx > me.length - 1) {
                    // 让idx从0开始
                    me.idx = 0;
                    // 瞬移到真图
                    css(me.dom, 'left', 0);
                }

                // 动画执行完毕之后 开锁
                me.lock = true;
            }) 
        },
        // 显示上一张图片的方法
        showPrev: function() {
            // 判断锁的状态
            if (!this.lock) return;
           
            // 把锁关闭
            this.lock = false;

            // 说明是向上滑动 相当于左按钮点击事件 
            // 左按钮点击事件策略: 先验证 后拉动

            // 改变信号量
            this.idx--;

            // 先验证
            if (this.idx < 0) {
                // 让idx变为最大值
                this.idx = this.length - 1;
                // 瞬移
                // 注意: 设置的value值要加上px
                css(this.dom, 'left', -this.width * this.length + 'px');
            }

            // 缓存this
            var me = this;

            // 拉动
            animate(this.dom, { left: -this.width * this.idx }, 600, function() {
                // 开锁
                me.lock = true;
            })
        },
        // 定义初始化方法
        init: function() {
            // 备份this
            var me = this;
            // 为document绑定鼠标滚轮事件
            document.onmousewheel = function(e) {
                // 判断鼠标滚轮的方法
                if (me.direction(e)) {
                    // 执行显示下一张图片的方法
                    me.showNext();
                } else {
                    // 执行显示上一张图片的方法
                    me.showPrev();
                }
            }
        }
    }


    // 执行初始化方法
    carousel.init();




    



    /****************************************************************************************************************/


    // 以下是面向过程的形式:
    // 获取元素
    // var container = $('container');
    // var ul = $('imgs');
    // // 所有的图片
    // var lis = document.getElementsByTagName('li');
    // // 定义长度
    // var length = lis.length - 1;
    // // 获取元素的宽度
    // var width = container.clientWidth;
    // // 定义锁
    // var lock = true;

    // // 定义信号量
    // var idx = 0;

    // // 定义获取滚轮方向的方法
    // function direction(e) {
    //     if (e.wheelDelta === undefined) {
    //         // 当值是二取一的时候 就可以使用三目运算简化
    //        return e.detail > 0 ? true : false; 

    //     } else {
    //         // 简写
    //         return e.wheelDelta > 0 ? false : true;
    //     }
    // }

    // // 绑定事件
    // bindEvent(document, 'mousewheel', function(e) {
    //     // 执行方法获取滚轮方向
    //     if (direction(e)) {
    //         // 判断锁的状态
    //         if (!lock) return;

    //         // 把锁关闭
    //         lock = false;

    //         // 说明图片应该从右边进去 相当于右按钮事件
    //         // 右按钮事件的策略: 先拉动 再验证

    //         // 该变信号量
    //         idx++;

    //         // 拉动
    //         animate(ul, { left: -width * idx }, 600, function() {
    //             // 验证信号量
    //             if (idx > length - 1) {
    //                 // 让idx从0开始
    //                 idx = 0;
    //                 // 瞬移到真图
    //                 css(ul, 'left', 0);
    //             }

    //             // 动画执行完毕之后 开锁
    //             lock = true;
    //         }) 

    //     } else {
    //         // 判断锁的状态
    //         if (!lock) return;
           
    //         // 把锁关闭
    //         lock = false;

    //         // 说明是向上滑动 相当于左按钮点击事件 
    //         // 左按钮点击事件策略: 先验证 后拉动

    //         // 改变信号量
    //         idx--;

    //         // 先验证
    //         if (idx < 0) {
    //             // 让idx变为最大值
    //             idx = length - 1;
    //             // 瞬移
    //             // 注意: 设置的value值要加上px
    //             css(ul, 'left', -width * length + 'px');
    //         }

    //         // 拉动
    //         animate(ul, { left: -width * idx }, 600, function() {
    //             console.log('动画执行完毕了');

    //             // 开锁
    //             lock = true;
    //         })

    //     }
    // })
    </script>
</body>
</html>

5.备份this

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    // 定义函数
    function a() {
        var num = 10;

        // 定义一个b函数中不存在的变量即可
        var num2 = num;


        // 备份this (定义一个b函数中不存在的变量)
        var me = this;


        // 定义内部函数
        function b() {

            var num = 20;
            // console.log(num2);

            console.log(me);
        }

        // 执行b函数
        b();
    }

    // 执行a函数
    a();
    </script>
</body>
</html>

6.构造函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    /**
     * 构造函数
     *  与普通函数在定义方式上没有不同, 只不过构造函数的首字母要大写,此要求非语法要求
     *  
     *  目的:
     *      -普通函数: 为了实现某一功能
     *      -构造函数: 为了创建对象
     * 
     *  调用方式:
     *      -普通函数: 直接调用
     *      -构造函数: 通过new关键字调用
     * 
     **/

    // 定义普通函数
    function demo() {
        console.log(this);
    }

    // 直接调用
    demo();

    // 构造函数
    function People() {
        console.log(222, this);
    }

    new People();
    </script>
</body>
</html>

7.对象之间的区别

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    // 定义方法 创建人
    // function people(name, age, sex) {
    //     // 定义对象
    //     var obj = {
    //         name: name,
    //         age: age,
    //         sex: sex
    //     }
    //     // 返回结果
    //     return obj;
    // }


    // // 执行方法
    // console.log(people('xiaoming', 12, '男'));


    // // 定义方法 创建狗
    // function dog(name, age, sex) {
    //     // 定义对象
    //     var obj = {
    //         name: name,
    //         age: age,
    //         sex: sex
    //     }
    //     // 返回结果
    //     return obj;
    // }

    // console.log(dog('小白', 1, '公'));


    // 通过构造函数创建对象
    function People() {}

    function Dog() {}

    console.log(new People());
    console.log(new Dog());


    // 结论: 对于普通函数创建出来的对象 无法精确类型  而构造函数是可以的


    </script>
</body>
</html>

8.构造函数执行时候的四个步骤

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    // 构造函数执行时候的四个步骤
        // 1 开辟一个新的内存空间
        // 2 改变this指向
        // 3 执行函数中的代码,为this赋值
        // 4 返回this
        

    // 概念介绍:
        // People称为构造函数  常常称之为People类 
        // 从People类中new出来的对象 称之为实例化对象 (该类的实例)

    function People(name, age, sex) {
        // 添加数据
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    // 创建对象 (实例化对象)
    var p = new People('xiaoming', 12, 'nan');
    console.log(222, p.name);
    console.log(222, p.age);
    console.log(222, p.sex);
    </script>
</body>
</html>

9.构造函数中出现return的情况

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    // 定义普通函数
    // function demo() {
    //     return 100;
    // }

    // // 普通函数如果想要得到内容 必须在函数中返回数据
    // console.log(demo());;


    // 定义类
    function People(name, age, sex) {
        // 添加数据
        this.name = name;
        this.age = age;
        this.sex = sex;

        // 返回值类型 是忽略的
        // return 100;
        // return 'abc';
        // return true;

        // 返回引用类型数据 则以返回值为准
        // return {}
        // return [];
        // return function() {}

        // 注意: 不要在构造函数中出现return

    }

    // 创建对象 (实例化对象)
    var p = new People('xiaoming', 12, 'nan');
    console.log(p);
    </script>
</body>
</html>

10.气球类

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    // 定义气球类
    function Balloon(img) {
        // 定义dom属性
        this.dom = document.createElement('div');
        // 定义宽的和高度属性
        this.width = img.width / 4;
        this.height = img.height / 3;


        // 定义随机的X值
        this.positionX = parseInt(Math.random() * 4);
        // 定义随机的Y值
        this.positionY = parseInt(Math.random() * 3);

        // 定位left值
        this.left = 0;
        // 定位top值
        this.top = 0;

        // 定义方法用于设置样式
        this.setStyle = function() {
            // 设置容器元素的宽高
            this.dom.style.width = this.width + 'px';
            this.dom.style.height = this.height + 'px';

            // 设置元素的定位
            this.dom.style.position = 'relative';
            this.dom.style.left = this.left + 'px';
            this.dom.style.top = this.left + 'px';
            
            // 设置盒子的背景图片
            this.dom.style.backgroundImage = 'url('+ img.src  +')';
            // 设置图片的随机位置
            this.dom.style.backgroundPositionX = -this.width * this.positionX + 'px';
            this.dom.style.backgroundPositionY = -this.height * this.positionY + 'px';
        }


        // 定义上树方法
        this.upTree = function() {
            document.body.appendChild(this.dom);
        }


        // 定义气球移动的方法
        this.move = function() {
            // 改变this.left值
            this.left += 5;
            // 设置元素的定位值
            this.dom.style.left = this.left + 'px';
        }


        // 定义检测是否到达边界的方法
        this.check = function() {
            // 判断气球的定位值
            if (this.dom.offsetLeft >= document.documentElement.clientWidth - this.dom.clientWidth) {
                // 设置元素的定位值
                this.dom.style.left = (document.documentElement.clientWidth - this.dom.clientWidth) + 'px';
            }
        }


        // 定义初始化方法
        this.init = function() {
            // 调用设置样式的方法
            this.setStyle();
            // 设置上树的方法
            this.upTree();
        }

        // 在最下面调用init方法
        this.init();

    }



    // 定义定时器的句柄
    var timer = null;
    // 创建图片元素
    var img = document.createElement('img');
    // 设置图片元素的路径
    img.src = './images/balloon.jpg';
    // 为了保证图片加载完毕之后使用 要设置load事件
    img.onload = function() {
        // 实例化气球类
        window.b = new Balloon(img);

        // 赋值定时器
        timer = setInterval(function() {
            // 不断调用move方法
            b.move();

            // 检测气球是否到达边界
            b.check();
        }, 30)
    }

   
    </script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值