【问题标题】:how to use iscroll javascript in phone gap?如何在电话间隙中使用 iscroll javascript?
【发布时间】:2013-06-03 12:46:26
【问题描述】:

我已尝试为我的应用程序实现 iscroll java 脚本作为 CSS position:fixed 的补救过程,该过程在使用 cordova 2.1.0

我从here复制了iscroll-lite的javascript

html代码

<div id="wrapper" class="wrapper">
<div id="wrapper-container" class="wrapper-container">
    <div id="header" class="header">
    <div id="header_title" class="header_title"> </div>
    <div id="abc" class="abc"><img src="img/abc.png""/>                     </div>
</div>
<div id="images" class="images"><img  name="slide" src="img/abc.png" width=100%; />
</div>
<div id="description"  class="description">
<div id="title" class="title">
    <h1><strong></strong></h1>
</div>
<div id="desc" class="desc">
</div>
</div>  

<div id="footer" style="background-image:url(img/bar.png);" class="footer">
<div id="footer_text" class="footer_text">footer_text</div>
<div id="image" class="image noSelect"><img src="img/info.png" onclick="info()"/></div>
</div>
</div>

desc标签的内容要溢出了

CSS

.wrapper
{
    position: absolute; width:auto; margin:0 auto; height:100%; overflow: hidden;
}
.wrapper_other
{
     width:auto; margin:0 auto; height:100%; overflow: hidden;
}
.wrapper_container
{
    width:100%;  margin:0 auto; font-family:Arial, Helvetica, sans-serif; 
}
.header
{
    float:left; height:100%;  min-height:100%; margin:0%; width:96%; padding:3% 2% 0;
}
.header_title
{
     float:left; padding:0%; margin:0%;  height:100%; min-height:100%; font-size:22px; color: #FFFFFF; text-align:center; font-weight: bold; width:80%; 
}

.images
{
    position:relative; width:100%;
}
.description
{
     float:left; width:100%; overflow:auto;  height:100%; 

}
.title
{
    width:85%; font-weight:bold; float:left; font-size:20px; margin-top:3%; margin-bottom:2%; margin-left:5%; color:#FFFFFF; 
}
.desc
{
      width:90%; font-size:15px; margin-left:5%; margin-right:5%; float:left; color: #FFFFFF; overflow:auto; text-align:justify; line-height:18px; padding:0px 0px 40px 0px; 
}
.desc p
{
      margin-top:0; 
}
.footer
{
     width:100%;  position:absolute; bottom:0; font-size:11px; color:#FFFFFF; text-align:center; height:30px;
}
.footer_text
{
    text-indent:1%; float:left; text-align:center;  width:75%;  margin-top:2%;
}
.info
{
    width:25%; float:right; padding-top:1%;
}

使用滚动

<script type="text/javascript" charset="utf-8" src="iscroll.js"></script>
<script type="text/javascript" charset="utf=8" src="cordova-2.1.0.js"></script> 


var myScroll;
document.addEventListener("deviceready", onDeviceReady, false);
function scroll() 
{
myScroll = new IScroll('.wrapper', { scrollX:false , scrollY:true});
}
----
----
function onDeviceReady() 
{   
    scroll();
    ----
    ----

滚动时,我只得到以下内容

W/webview(3101): Miss a drag as we are waiting for WebCore's response for touch down.

问题:

它不是滚动的。如果经过很大的努力后它确实滚动了,但它只滚动一次。我回到主页并返回它根本不滚动。

请指导我!!

编辑:我尝试了各种组合..将所有 div 替换为 li 标签...css 无效。然后在每个 div 中使用 li 标签。没用...它没有滚动。:

<div id="wrapper">
<div id="scroller">
<ul>
  <div id="header " class="header ">
     <div id="header_title" class="header_title"> </div>
    <div id="xyz" class="xyz"><img src="img/xyz.png" onClick="xyz()"/></div>    </div>  </ul>

<ul>
      <div id="images" class="images"><img  name="slide" src="img/banner1.png" width=100%; />
   </div>
</ul>

<ul>
  <div id="param" class="param">
    <div id="abc" class="abc noSelect"> </div>
        <div id="def" class="def noSelect" > </div>
        <div id="ghi" class="ghi noSelect" > </div>
        <div id="ijk" class="ijk noSelect" > </div>
    </div>
</ul>

<ul>
  <div id="description"  class="description">
       <div id="title"  class="title">
    <h1><strong><li></li></strong></h1>
       </div>

    <div id="desc" class="desc">
    <p><li></li> </p>
    </div>
</div>

</ul>

【问题讨论】:

  • 普通人帮助我们!!!请...请

标签: javascript html cordova cordova-2.0.0 iscroll


【解决方案1】:

在您发布的脚本代码中,我发现了一个错误。我不知道您的实际文件中是否也存在此错误。但想先分享一个。

这是您的脚本代码。

myScroll = new IScroll('.wrapper', { scrollX:false , scrollY:true});

我发现了错误

  • .wrapperCSS 规则名称。你最好在这里通过ID。将假定您的 IDiScrollWrapper,然后启用以下格式的滚动条。

myScroll = new IScroll('iScrollWrapper', { scrollX:false , scrollY:true});

现在将看到iScroll 的最佳DOM structure(HTML 格式),它不会给您带来麻烦,仍然是W3C valid

选项 1

<div id="iScrollWrapper" class="****** IMPORTANT_POINT_1 ******">
   <ul>
      <li>
          <YOUR_REMAINING_DOM_STRUCTURE_IN_THE_WAY_YOU_NEED>
      </li>
   </ul>
</div>

选项 2

<div id="iScrollWrapper" class="****** IMPORTANT_POINT_1 ******">
   <ul>
      <li>
          <YOUR_ONE_DOM_STRUCTURE_IN_THE_WAY_YOU_NEED>
      </li>
      <li>
          <YOUR_ANOTHER_DOM_STRUCTURE_IN_THE_WAY_YOU_NEED>
      </li>
      <li>
          <YOUR_ANOTHER_DOM_STRUCTURE_IN_THE_WAY_YOU_NEED>
      </li>
   </ul>
</div>

首先想到你要做的是

****** IMPORTANT_POINT_1 ******

您附加 iScroll 的元素应具有非静态、非固定位置类型(可以使用“relative”或“absolute”)。该元素应该在 pixel 中有 height(如果你有 min-heightmax-height 但没有 **height** iScroll 会说对不起。它不会工作)

现在将了解如何附加 iScroll。

附加iScroll的好方法如下(这是我在为元素应用iScroll时学到的)

如果您使用的是Single Page Application (SPA),那么

if('undefined' != typeof iScrollerObject){
  iScrollerObject.destroy(); 
}
iScrollerObject = new iScroll('iScrollWrapper',{/* OPTIONS_GOES_HERE */});

如果您在 SPA 应用程序中将 iScrollerObject 作为您的成员变量,请使用

var _this = this;
if(null != _this.iScrollerObject){
  _this.iScrollerObject.destroy(); 
}
_this.iScrollerObject = new iScroll('iScrollWrapper',{/* OPTIONS_GOES_HERE */});

对于普通浏览器页面。

var iScrollerObject = new iScroll('iScrollWrapper',{/* OPTIONS_GOES_HERE */});

如果您动态更新内容,请在您的选项中使用checkDOMChanges : true。如果仍然无法更新滚动条以进行动态 DOM 更改,那么在您完成动态 DOM 更改调用 iScrollerObject.refresh();

我分享了我在经验中对iScroll 的了解。如果您需要任何东西,请告诉我。请记住您使用的是iScroll lite 版本,它的功能实际上比标准iScroll4 少。如果您想使用iScroll 版本,请使用iScroll4

【讨论】:

    【解决方案2】:

    您似乎没有遵循 iScroll 要求的结构。 iScroll 页面特别提到(注意粗体字):

    最优的iScroll结构是:

    <div id="wrapper">
      <ul>
          <li></li>
          ...
          ...
      </ul>
    </div>
    

    在本例中,UL 元素将被滚动。 iScroll 必须是 应用于滚动区域的包装。

    重要提示:只有包装元素的第一个子元素会是 滚动。如果您需要滚动条内的更多元素,您可以使用 以下结构

    <div id="wrapper">
      <div id="scroller">
          <ul>
              <li></li>
              ...
              ...
          </ul>
    
          <ul>
              <li></li>
              ...
              ...
          </ul>
      </div>
    </div>
    

    在这个例子中,滚动元素将被滚动(连同 两个 UL)。

    你有:

    <div id="wrapper" class="wrapper">
      <div id="wrapper-container" class="wrapper-container">
      ... head ...
      </div>
    
      ... (your main div here) ...
    </div>
    

    所以你的主 div 不会被 iScroller 滚动,你只是让标题 div 可滚动。看看iScroll demo 并先对其进行测试......它是否适用于您的设备?如果是,请尝试遵循其结构。

    【讨论】:

    • 哦...那么先生,我应该把我的标题,标题标题,...等标签放在&lt;ul&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;格式中吗?
    • 是的,这就是 iScroll 作者建议的 HTML 结构,以便可以使用 iScroll。请参阅 iScroll 页面和那里的示例以获取更多信息
    • 先生,演示正在设备上工作,需要使用我的 codet 进行检查。不,先生,我尝试给每个 div 分配 li...我在 Dreamweaver 中遇到此错误The tag:"div" is not allowed within: "html" It is only allowed within: applet, blockquote, body, button, center, dd, del, div, fieldset, form, iframe, ins, li, map, noframes, noscript, object, td, th.
    • 请先生,帮帮我..您的建议没有成功...请找到问题的最后编辑版本..
    • iScroll 4 演示有效吗?在这里查看lab.cubiq.org/iscroll/examples/simple
    猜你喜欢
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多