ホームページ > 記事 > ウェブフロントエンド > HTMLで画像にクリックイベントを追加する方法を詳しく解説
まず、jQuery セレクターを使用して、クリック イベントをバインドする img 要素を取得します。次に、クリック メソッドを直接バインドするか、バインド メソッドを通じてバインドできます。ここではbindメソッドについて詳しく紹介します。
jQueryイベント - binding() メソッド - 定義と使用法
bind() メソッドは、選択した要素に 1 つ以上のイベント ハンドラープログラムを追加し、イベントの発生時に実行する関数を指定します。
jQuery イベント - binding() メソッド - イベントと関数を要素にバインドします。
選択した要素に追加する 1 つ以上のイベント ハンドラーと、イベントの発生時に実行する関数を指定します。
jQueryイベント -bind()メソッド - 構文
$(selector).bind(event,data,function)
jQueryイベント -bind()メソッド -パラメータの説明
event 必須。要素に追加する 1 つ以上のイベントを指定します。スペースで区切られた複数のイベント。有効なイベントである必要があります。
データ オプション。関数に渡す追加データを指定します。
関数は必須です。イベントの発生時に実行する関数を指定します。
例:
//直接给所有img标签绑定click事件 $("img").click(function(){ alert('你点击了图片'); }) //使用bind方法绑定click事件 $("img").bind("click",function(){ alert('你点击了图片'); })
Html img タグはクリックイベントを追加します
package com.topnews; import java.util.ArrayList; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.WebSettings.LayoutAlgorithm; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ProgressBar; import android.widget.TextView; import com.topnews.base.BaseActivity; import com.topnews.bean.NewsEntity; import com.topnews.service.NewsDetailsService; import com.topnews.tool.BaseTools; import com.topnews.tool.DataTools; import com.topnews.tool.DateTools; @SuppressLint("JavascriptInterface") public class DetailsActivity extends BaseActivity { private TextView title; private ProgressBar progressBar; private FrameLayout customview_layout; private String news_url; private String news_title; private String news_source; private String news_date; private NewsEntity news; private TextView action_comment_count; WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.details); setNeedBackGesture(true);// 设置需要手势监听 getData(); initView(); initWebView(); } /* 获取传递过来的数据 */ private void getData() { news = (NewsEntity) getIntent().getSerializableExtra("news"); news_url = news.getSource_url(); news_title = news.getTitle(); news_source = news.getSource(); news_date = DateTools.getNewsDetailsDate(String.valueOf(news.getPublishTime())); } private void initWebView() { webView = (WebView) findViewById(R.id.wb_details); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); if (!TextUtils.isEmpty(news_url)) { WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true);// 设置可以运行JS脚本 // settings.setTextZoom(120);//Sets the text zoom of the page in // percent. The default is 100. settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); // settings.setUseWideViewPort(true); //打开页面时, 自适应屏幕 // settings.setLoadWithOverviewMode(true);//打开页面时, 自适应屏幕 settings.setSupportZoom(false);// 用于设置webview放大 settings.setBuiltInZoomControls(false); webView.setBackgroundResource(R.color.transparent); // 添加js交互接口类,并起别名 imagelistner webView.addJavascriptInterface(new JavascriptInterface(getApplicationContext()), "imagelistner"); webView.setWebChromeClient(new MyWebChromeClient()); webView.setWebViewClient(new MyWebViewClient()); Log.i("info", "news_url:" + news_url); Log.i("info", "news_title:" + news_title); Log.i("info", "news_source:" + news_source); Log.i("info", "news_date:" + news_date); new MyAsnycTask().execute(news_url, news_title, news_source + " " + news_date); } } private void initView() { title = (TextView) findViewById(R.id.title); progressBar = (ProgressBar) findViewById(R.id.ss_htmlprogessbar); customview_layout = (FrameLayout) findViewById(R.id.customview_layout); // 底部栏目 action_comment_count = (TextView) findViewById(R.id.action_comment_count); progressBar.setVisibility(View.VISIBLE); title.setTextSize(13); title.setVisibility(View.VISIBLE); title.setText(news_url); action_comment_count.setText(String.valueOf(news.getCommentNum())); } @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); } private class MyAsnycTask extends AsyncTask<String, String, String> { @Override protected String doInBackground(String... urls) { String data = NewsDetailsService.getNewsDetails(urls[0], urls[1], urls[2]); Log.i("info", "MyAsnycTask.data:" + data); return data; } @Override protected void onPostExecute(String data) { webView.loadDataWithBaseURL(null, data, "text/html", "utf-8", null); } } // 注入js函数监听 private void addImageClickListner() { // 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,在还是执行的时候调用本地接口传递url过去 webView.loadUrl("javascript:(function(){" + "var objs = document.getElementsByTagName(\"img\");" + "var imgurl=''; " + "for(var i=0;i<objs.length;i++) " + "{" + "imgurl+=objs[i].src+',';" + " objs[i].onclick=function() " + " { " + " window.imagelistner.openImage(imgurl); " + " } " + "}" + "})()"); } // js通信接口 public class JavascriptInterface { private Context context; public JavascriptInterface(Context context) { this.context = context; } public void openImage(String img) { // String[] imgs = img.split(","); ArrayList<String> imgsUrl = new ArrayList<String>(); for (String s : imgs) { imgsUrl.add(s); Log.i("图片的URL>>>>>>>>>>>>>>>>>>>>>>>", s); } Intent intent = new Intent(); intent.putStringArrayListExtra("infos", imgsUrl); intent.setClass(context, ImageShowActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } // 监听 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); } @Override public void onPageFinished(WebView view, String url) { view.getSettings().setJavaScriptEnabled(true); super.onPageFinished(view, url); // html加载完成之后,添加监听图片的点击js函数 addImageClickListner(); progressBar.setVisibility(View.GONE); webView.setVisibility(View.VISIBLE); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { view.getSettings().setJavaScriptEnabled(true); super.onPageStarted(view, url, favicon); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { progressBar.setVisibility(View.GONE); super.onReceivedError(view, errorCode, description, failingUrl); } } private class MyWebChromeClient extends WebChromeClient { @Override public void onProgressChanged(WebView view, int newProgress) { // TODO Auto-generated method stub if (newProgress != 100) { progressBar.setProgress(newProgress); } super.onProgressChanged(view, newProgress); } } }
// NewsDetailsService.java
package com.topnews.service; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import android.text.TextUtils; public class NewsDetailsService { public static String getNewsDetails(String url, String news_title, String news_date) { Document document = null; String data = "<body>" + "<center><h2 style='font-size:16px;'>" + news_title + "</h2></center>"; data = data + "<p align='left' style='margin-left:10px'>" + "<span style='font-size:10px;'>" + news_date + "</span>" + "</p>"; data = data + "<hr size='1' />"; try { document = Jsoup.connect(url).timeout(9000).get(); Element element = null; if (TextUtils.isEmpty(url)) { data = ""; element = document.getElementById("memberArea"); } else { element = document.getElementById("artibody"); } if (element != null) { data = data + element.toString(); } data = data + "</body>"; } catch (IOException e) { e.printStackTrace(); } return data; } }
以上がHTMLで画像にクリックイベントを追加する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。