【达内课程】H5前端开发中的js(3)

news/2024/7/19 14:59:03 标签: js, canvas

文章目录

  • js中的继承
  • 混合开发中java调js
  • 混合开发中js调java
  • Canvas

js_1">js中的继承

<script type="text/javascript">
      //父类
      function FatherClass(x){
       this.showInfo = function(){
        window.alert("FatherClass x="+this.x);
       }
      }
      //子类
      function ChildClass(x){

      }
      //实现继承
      ChildClass.prototype = new FatherClass();

      var childObject = new ChildClass();
      childObject.x = 18;
      childObject.showInfo();
     </script>

在这里插入图片描述

js_23">混合开发中java调js

在这里插入图片描述
index.html

<html lang="en">
 <head>
	......
     <script type="text/javascript">
      function setUsername(){
       var usernameInput = document.getElementById("username");
       usernameInput.value = "android test";
      }
     </script>
 </head>
 <body>
  <input id="username"/>
 </body>
</html>

activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/call_js_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="call js"/>

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

</LinearLayout>

MainActivity

public class MainActivity extends AppCompatActivity {
    private WebView webView;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = findViewById(R.id.call_js_button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                callJs(view);
            }
        });

        webView = findViewById(R.id.webView);
        //加载网页
        webView.loadUrl("file:///android_asset/index.html");
        WebSettings webSettings = webView.getSettings();
        // 设置与Js交互的权限
        webSettings.setJavaScriptEnabled(true);
        //允许弹框
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                return super.onJsAlert(view, url, message, result);
            }
        });

        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return super.shouldOverrideUrlLoading(view, request);
            }
        });
    }

    public void callJs(View view){
        //通过java调js
        webView.loadUrl("javascript:setUsername()");
    }
}

jsjava_115">混合开发中js调java

现在实现以下功能,单击网页中按钮,实现拨打电话功能(真机上测试)

声明打电话权限权限

<uses-permission android:name="android.permission.CALL_PHONE"/>

网页中增加一个按钮,单击时调用callJava()

<script type="text/javascript">
      function callJava(){
       androidPhoneObject.call(1008611);
      }
     </script>
<input type="button" value="callJava" onclick="callJava()"/>

MainActivity

public class MainActivity extends AppCompatActivity {
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = findViewById(R.id.webView);
        //加载网页
        webView.loadUrl("file:///android_asset/index.html");
        WebSettings webSettings = webView.getSettings();
        // 设置与Js交互的权限
        webSettings.setJavaScriptEnabled(true);
       
        Phone phone = new Phone();
        //js调phone对象
        //在网页中通过androidPhoneObject使用phone对象
        webView.addJavascriptInterface(phone,"androidPhoneObject");
    }

    final class Phone{
        //告诉编辑器,这个方法给js用
        @JavascriptInterface
        public void call(String mobile){
            Uri uri = Uri.parse("tel:"+mobile);
            Intent intent = new Intent(Intent.ACTION_CALL,uri);
            startActivity(intent);
        }
    }
}

Canvas

在这里插入图片描述
在这里插入图片描述

<!doctype html>
<html lang="en">
 <head>
  ......
     <script type="text/javascript">
      var gameCanvas;
      //画图,文字,矩形
      var context;
      var backgroundImage;
      var backgroundX = 0;

      var carImage;
      var carX = 0;
      var index = 0;

      function load(){
       gameCanvas = document.getElementById("gameCanvas");
       context = gameCanvas.getContext("2d");
       //加载沙漠背景图
       backgroundImage = new Image();
       backgroundImage.src = "space.jpg";
       //当背景图片加载完成后,每隔100ms执行一次draw
       backgroundImage.onload = function(){
        window.setInterval(draw,100);
       }
       //加载车的图片
       carImage = new Image();
       carImage.src = "alien.png";
      }

      function draw(){
       backgroundX = backgroundX - 20;
       if(backgroundX < 300-backgroundImage.width){
        backgroundX = 0;
       }
       console.log("backgroundX = "+ backgroundX);
       context.drawImage(backgroundImage,backgroundX,0);

       carX = carX + 20;
       if(carX > 300){
        carX = 0;
       }
       //上下颠簸效果
       index ++;
       if(index%2==0){
        context.drawImage(carImage,carX,100);
       }else{
        context.drawImage(carImage,carX,120);
       }

      }
      //设置网页加载完后,执行load函数
      window.onload = load;
     </script>
 </head>
 <body>
  <canvas id="gameCanvas" width="300" height="308"></canvas>
 </body>
</html>

http://www.niftyadmin.cn/n/1817233.html

相关文章

8086计算机组织

目录 系统总线 8086的基本性能指标 8086的功能结构 > 8086CPU结构示意图…………………………………………重点 > 8086的寄存器结构……………………………………………重点 通用寄存器的一般用途 标志寄存器&#xff08;FLAGS/PSW&#xff09; > FLAGS的重要标…

【达内课程】H5前端开发中的jquery

文章目录了解jquery中的$jquery对象jquery对象和dom对象转换栗子bootstrap失去焦点获取数据点击事件传递数据改变图片页面间传值jquery代码创建页面了解jquery中的$ 在这个栗子中&#xff0c;我们有2个按钮&#xff0c;button2&#xff0c;button2&#xff0c;通过两种不同方式…

命令执行的判断根据与管道命令

目录 不考虑相关性的连续命令执行 通过返回值来判断后续的命令是否执行 管道命令 不考虑相关性的连续命令执行 cmd ; cmd 通过返回值来判断后续的命令是否执行 命令返回值$?&#xff1a;若前一个命令正确执行&#xff0c;变量$?0&#xff1b;否则为1通过返回值来判断后…

SQL-DML语句

目录 添加数据&#xff08;INSERT&#xff09; 1. 给指定字段添加数据 2. 给全部字段添加数据 3. 批量添加数据 修改数据&#xff08;UPDATE&#xff09; 删除数据&#xff08;DELETE&#xff09; DML: Data Manipulation Language&#xff0c;数据操作语言&#xff0c;用…

什么是软件工程

目录 软件的定义 软件工程的定义 软件开发 软件开发的本质 软件工程框架 目标 正确性 可用性 开销合宜 活动 &#xff08;1&#xff09;需求 &#xff08;2&#xff09;设计 &#xff08;3&#xff09;实现 &#xff08;4&#xff09;确认 &#xff08;5&#x…

数据流重定向

目录 基本知识 标准输出重定向 垃圾桶黑洞设备 将正确和错误信息写入同一个文件 使用情形 标准输入重定向 < << 双向重定向&#xff1a;tee 语法 基本知识 标准输出指的是命令执行所返回的正确信息&#xff0c;标准错误输出可以理解为命令执行失败所返回的…

选取命令:cut、grep

目录 cut&#xff1a;切割每行&#xff0c;取出需要的段 语法 选项与参数 grep&#xff1a;分析每行信息&#xff0c;取出包含目标信息的所有行 语法 选项与参数 cut&#xff1a;切割每行&#xff0c;取出需要的段 语法 cut -d 分隔字符 -f fields #用于有特定分隔字…

排序命令:sort、wc、uniq

目录 sort 语法 选项与参数 uniq 语法 选项与参数 wc 语法 选项与参数 sort 默认以文字形式排序 语法 sort [-fbMnrtuk] [file or stdin] 选项与参数 -f忽略大小写-b忽略开头的空格-M按照月份排序-n以【纯数字】形式进行排序-r反向排序 -t 后接分隔字符&#xff…